Cmake链接第三方库的三种方法

Cmake链接第三方库的三种方法

本文介绍链接第三方库的3种方法(以OpenBLAS举例。使用的工程名称为Test_lib(可执行文件名字),主程序为library.c。代码中的各路径请自行替代):
(1)通过OpenBLASConfig.cmake文件(其中的内容是lib和头文件位置),然后使用find_package查找即可。具体代码如下:

add_executable(Test_lib library.c)
set(OpenBLAS_DIR "/path to .camke文件")
find_package(OpenBLAS REQUIRED)
include_directories(${OpenBLAS_INCLUDE_DIRS})
target_link_libraries(Test_lib ${OpenBLAS_LIBRARIES})

.cmake一般会由第三方库自动生成,去安装路径寻找。里面包含的是库文件和头文件的路径设置。
(2)通过find_library直接设置设置库文件和头文件的地址,具体代码如下:

include_directories(/path to OpenBLAS/include/)
find_library(OPENBLAS NAMES OpenBLAS PATHS /path to OpenBLAS/lib/ NO_DEFAULT_PATH)
add_executable(Test_lib library.c)
target_link_libraries(Test_lib ${OPENBLAS})

(3)通过link_directories直接设置库文件和头文件的地址,具体代码如下:

include_directories(/path to OpenBLAS/include/) # 头文件的路径
link_directories(/path to OpenBLAS/lib/) # .a文件的路径
add_executable(Test_lib library.c)
target_link_libraries(Test_lib libopenblas.a)

注意,在第3种方法下,add_executable语句一定要在link_directories之后,否则会找不到库文件。(不知道是不是新版本的cmake(使用的版本是3.15.3)才会有这个问题。网上的例子很多都是放在link_directories之前的。)
cmake官方认为应该尽量避免使用这个方法,尽量使用find_package() 和 find_library():https://cmake.org/cmake/help/v3.13/command/link_directories.html

你可能感兴趣的:(Programming,编程,cmake,C)