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

我正在使用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&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...