无法在cmake中包含外部以前构建的.a库

时间:2016-08-17 09:27:14

标签: c++ cmake

我有一个先前编译过的libgarithm.a库,并且有一个头文件garith.h如何在我的cmake项目中导入它。我已经包含了头文件 include_directories(" /家庭/拉夫/桌面/ garith-LIB /包括&#34) 但无法链接库,它给出了一个comile时间错误 ---未定义的引用`multi(int,int)'我的库中的功能

2 个答案:

答案 0 :(得分:2)

您应该为库创建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

答案 1 :(得分:0)

从CMake 3.12.1开始,导入的目标还支持用于正常目标的target_include_directories以及其他语法糖。

对于使用这些语句编写cmake文件的用户,请添加cmake_minimum_required(3.12)

如果在编译特定的第三方库时遇到错误,请检查cmake --version