我正在使用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的头文件?
答案 0 :(得分:13)
如果您可以指定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)