【问题标题】:Unable to include external previous built .a libraries in cmake无法在 cmake 中包含以前构建的外部 .a 库
【发布时间】:2016-08-17 09:27:13
【问题描述】:

我有一个之前编译的 libgarithm.a 库,并且有一个头文件 garith.h 我如何将它导入到我的 cmake 项目中。我已经包含了来自的头文件 include_directories("/home/gaurav/Desktop/garith-lib/include") 但无法链接库并且它给出了一个comile time错误 --- 未定义引用我的库中的函数'multi(int, int)'

【问题讨论】:

    标签: c++ cmake


    【解决方案1】:

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

    【讨论】:

    • 非常感谢但现在我收到错误--:错误:无法为导入的目标“garithm”指定包含目录。
    • 我编辑了我的答案。您是在使用target_include_directories 还是在设置属性INTERFACE_INCLUDE_DIRECTORIES
    【解决方案2】:

    从 CMake 3.12.1 开始,导入的目标也支持 target_include_directories 以及其他普通目标的语法糖。

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

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

    【讨论】:

      猜你喜欢
      • 2013-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-07
      • 1970-01-01
      • 1970-01-01
      • 2013-02-16
      相关资源
      最近更新 更多