c++ - CMake - 不同目标的不同包含目录?

标签 c++ linux cmake

我正在使用 CMake 在 Linux 中开发一个 C++ 项目。

我正在创建两个库,LibALibB。我不希望 LibALibB 具有相同的包含目录。有什么方法可以只设置 LibA 以包含 DirectoryA 并仅设置 LibB 以包含 DirectoryB

编辑:

LibALibB 都将在可执行文件MyExe 中使用。当我在 MyExe 的源代码中 #include LibA.hLibB.h 时,我无法从 DirectoryA< 中包含头文件DirectoryB 共存于 MyExe 中,因为这会产生命名空间冲突。

这可能吗?

编辑 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 - 不同目标的不同包含目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20643368/

相关文章:

c++ - 如何在 Windows 和 CMake 上使用 Visual Studio 为 Mac OS X 编译 C++

linux - 先前命令执行的退出代码始终为 0——在远程 Shell 执行中 $?

cmake - 前置到 RPATH

编译 OpenCL HelloWorld 程序 : Linker Error

c# - 从 ASP.NET webservice 调用有状态的非托管 C++ 类

c++ - 什么时候使用HeapCreate函数或者什么情况下需要堆的数量?

c++ - 错误 LNK2001 和错误 LNK2019 (C++) -- 请求了解这些错误

linux - dev_err() 函数定义

c - 这个 valgrind 输出是否意味着存在内存泄漏? (重命名问题)

c - 当包含文件不存在时如何优雅地使 CMake 失败?