【发布时间】:2014-01-05 18:13:05
【问题描述】:
我正在使用 CMake 在 Linux 中开发一个 C++ 项目。
我正在创建两个库,LibA 和 LibB。我不希望 LibA 和 LibB 拥有相同的包含目录。有什么办法可以只设置LibA 以包含DirectoryA 并只设置LibB 以包含DirectoryB?
编辑:
LibA 和 LibB 都将在可执行文件 MyExe 中使用。当我在 MyExe 的源代码中 #include LibA.h 和 LibB.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 文件,创建子目录。
-
感谢您的评论。我的原始问题已更新,以更好地反映我的问题。
-
I cannot have the included header files from DirectoryA and DirectoryB coexisting in MyExe, as this will create namespace conflicts恕我直言,这是设计问题,如果您解决包含冲突,您可能会遇到奇怪的链接器错误和意外的运行时行为