c – CMake – 针对不同目标的不同包含目录?

c – CMake – 针对不同目标的不同包含目录?,第1张

概述我正在使用CMake在 Linux中开发一个C项目. 我正在创建两个库,LibA和LibB.我不希望LibA和LibB拥有相同的包含目录.有什么办法我只能设置LibA来包含DirectoryA并且只设置LibB来包含DirectoryB吗? 编辑: LibA和LibB都将用于可执行文件MyExe.当我在MyExe的源代码中#include LibA.h和LibB.h时,我无法在MyExe中拥有Di 我正在使用CMake在 Linux中开发一个C项目.

我正在创建两个库,libA和libB.我不希望libA和libB拥有相同的包含目录.有什么办法我只能设置libA来包含DirectoryA并且只设置libB来包含DirectoryB吗?

编辑:

libA和libB都将用于可执行文件MyExe.当我在MyExe的源代码中#include libA.h和libB.h时,我无法在MyExe中拥有DirectoryA和DirectoryBcoexisting中包含的头文件,因为这会产生命名空间冲突.

这可能吗?

编辑2:这是我的CMakeLists.txt
include_directorIEs(包括)

add_library(libA src/libA.cpp include/libA.h)set_property(TARGET libA PROPERTY INCLUDE_DIRECTORIES /opt/Somelibrary2.0/include/)target_link_librarIEs(libA /opt/Somelibrary2.0/lib/a.so /opt/Somelibrary2.0/lib/b.so /opt/Somelibrary2.0/lib/c.so)add_library(libB src/libB.cpp include/libB.h)set_property(TARGET libB PROPERTY INCLUDE_DIRECTORIES ${liB_B_INCLUDE_Dirs})target_link_librarIEs(libB ${liB_B_liBRARIES})add_executable(MyExe src/myexe.cpp)target_link_librarIEs(MyExe libA libB)

但我仍然遇到错误. libA.h说Somelibrary的头文件无法找到?

解决方法 如果您可以指定CMake版本2.8.12作为最低版本,则可以使用 target_include_directories.这是在2.8.11版本中引入的,但我认为它有点儿错误,直到2.8.12.

所以你可以这样做:

target_include_directorIEs(libA PRIVATE DirectoryA)target_include_directorIEs(libB PRIVATE DirectoryB)

如果必须支持较旧版本的CMake,则可以在目标上正确设置INCLUDE_DIRECTORIES属性:

set_property(TARGET libA             PROPERTY INCLUDE_DIRECTORIES ${CMAKE_SOURCE_DIR}/DirectoryA)set_property(TARGET libB             PROPERTY INCLUDE_DIRECTORIES ${CMAKE_SOURCE_DIR}/DirectoryB)
总结

以上是内存溢出为你收集整理的c – CMake – 针对不同目标的不同包含目录?全部内容,希望文章能够帮你解决c – CMake – 针对不同目标的不同包含目录?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1232855.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存