CMake添加第三方库

6,790 阅读1分钟

添加CMake本身支持的第三方库

比如说需要添加第三方curl库的支持

方案一
# 告诉编译器头文件的位置,这样可以调用头文件中的函数
include_directories(/usr/local/include/curl)
add_executable(demo xxx)
# 告诉链接器共享库文件的位置,这样链接器就相当于知道了curl的实现
target_link_libraries(demo /usr/local/lib/libcurl.so)

方案二
find_package(CURL REQUIRED)
# 给编译器
include_directories(${CURL_INCLUDE_DIR})
add_executable(demo xxx)
# 给链接器
target_link_libraries(demo ${CURL_LIBRARY})


方案二能使用find_package的具体原因在于/usr/share/cmake/Modules下已经定义了很多的cmake文件,
例如
    FindQt4.cmake
    FindGIF.cmake
    FindCURL.cmake等
我们通过命令查看
$ cmake --help-module FindCURL
FindCURL
--------

Find curl

Find the native CURL headers and libraries.

::

 CURL_INCLUDE_DIRS   - where to find curl/curl.h, etc.
 CURL_LIBRARIES      - List of libraries when using curl.
 CURL_FOUND          - True if curl found.
 CURL_VERSION_STRING - the version of curl found (since CMake 2.8.8)

添加其它的第三方库

# cmake/FindLoopEvent.cmake

FIND_PATH(LOOP_EVENT_INCLUDE_DIR event_loop.h /usr/local/include/EventLoop/)

FIND_LIBRARY(LOOP_EVENT_LIBRARY libeventloop.so /usr/local/lib/)

if(LOOP_EVENT_INCLUDE_DIR AND LOOP_EVENT_LIBRARY)
    set(EVENTLOOP_FOUND TRUE)
endif(LOOP_EVENT_INCLUDE_DIR AND LOOP_EVENT_LIBRARY)
# CMakeList.txt

# 定义自己的cmake所在的路径
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)

find_package(LoopEvent REQUIRED)

include_directories(${LOOP_EVENT_INCLUDE_DIR})
add_executable(cxk_demo xxx)
target_link_libraries(cxk_demo ${LOOP_EVENT_LIBRARY})