【问题标题】:CMake how to force third_party library include the project file in current project source directory? [duplicate]CMake如何强制第三方库包含当前项目源目录中的项目文件? [复制]
【发布时间】:2020-09-15 06:31:32
【问题描述】:

我有一个预编译的依赖库 A,它只有 include/ 和 lib/

A 使用系统库B 构建,安装在/usr/local/include/B/ 和/usr/local/lib/B 中

但是在我的构建系统上没有库B 并且不允许我修改系统(没有特权)。

我下载了B并将B_include放入本地项目C的include目录,将B_lib放入C的lib目录。

我在本地项目的CMakeList.txt 中试过:

include_directories(
    C_INCLUDE_DIR
    B_INCLUDE_DIR
)

link_directories(
    C_LIB_DIR
    B_LIB_DIR
)

但是当针对库A编译C时,A的include找不到本地头文件B_INCLUDE_DIR。除了直接导航到系统include 和lib 目录之外,有谁知道如何强制 CMake 查找本地库文件?

总结一下,我可以告诉CMake强制预编译库使用本地include文件吗?

【问题讨论】:

  • "但它不起作用"...这是一个非常模糊的问题描述。您能否描述如何它不起作用,包括任何相关的错误消息或不良行为。此外,看起来question 的地址与您所要求的内容非常相似。具体来说,link_directories() 实际上并没有链接库,它只是为链接器提供了一个额外的路径用于库搜索。

标签: c++ cmake ros


【解决方案1】:

刚刚解决了问题。原来是我自己的错误。感谢squareskittles的cmets。

以下 CMakeList 推荐可以很好地完成工作:

include_directories(
    C_INCLUDE_DIR
    B_INCLUDE_DIR
)

link_directories(
    C_LIB_DIR
    B_LIB_DIR
)

rosbuild_add_executable(your_executable src/your_source_file.cpp)

TARGET_LINK_LIBRARIES(your_executable lib1.so lib2.so lib3.so ...)

【讨论】:

    猜你喜欢
    • 2016-02-08
    • 2016-08-04
    • 2023-04-10
    • 1970-01-01
    • 2011-01-17
    • 1970-01-01
    • 2016-12-09
    • 2019-02-16
    • 1970-01-01
    相关资源
    最近更新 更多