【发布时间】:2016-08-17 09:27:13
【问题描述】:
我有一个之前编译的 libgarithm.a 库,并且有一个头文件 garith.h 我如何将它导入到我的 cmake 项目中。我已经包含了来自的头文件 include_directories("/home/gaurav/Desktop/garith-lib/include") 但无法链接库并且它给出了一个comile time错误 --- 未定义引用我的库中的函数'multi(int, int)'
【问题讨论】:
我有一个之前编译的 libgarithm.a 库,并且有一个头文件 garith.h 我如何将它导入到我的 cmake 项目中。我已经包含了来自的头文件 include_directories("/home/gaurav/Desktop/garith-lib/include") 但无法链接库并且它给出了一个comile time错误 --- 未定义引用我的库中的函数'multi(int, int)'
【问题讨论】:
您应该为您的库创建一个imported target,然后使用target_link_libraries:
add_library(garithm STATIC IMPORTED)
set_property(TARGET garithm PROPERTY IMPORTED_LOCATION
/path/to/libgarithm.a
)
set_property(TARGET garithm PROPERTY INTERFACE_INCLUDE_DIRECTORIES
/home/gaurav/Desktop/garith-lib/include
)
...
add_executable(foo main.cpp)
target_link_libraries(foo garithm)
在导入的目标上也声明了包含目录,因此您不必调用include_directories
编辑: target_include_directories不适用于导入的目标,改为设置属性INTERFACE_INCLUDE_DIRECTORIES
【讨论】:
target_include_directories 还是在设置属性INTERFACE_INCLUDE_DIRECTORIES?
从 CMake 3.12.1 开始,导入的目标也支持 target_include_directories 以及其他普通目标的语法糖。
对于那些使用这些语句编写cmake文件的人,请添加cmake_minimum_required(3.12)
如果您在编译特定第三方库时遇到错误,请检查cmake --version
【讨论】: