我正在使用CMake在Linux中开发一个C++项目.
我正在创建两个库,LibA和LibB.我不希望LibA和LibB拥有相同的包含目录.有什么方法我可以设置只LibA包括DirectoryA和设置只LibB包括DirectoryB?
编辑:
双方LibA并LibB会在可执行文件中使用,MyExe.当我#include LibA.h和LibB.hMyExe的源代码中,我不能拥有包含的头文件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)
Run Code Online (Sandbox Code Playgroud)
但我仍然遇到错误.LibA.h说SomeLibrary的头文件无法找到?
Fra*_*ser 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)
Run Code Online (Sandbox Code Playgroud)
如果必须支持旧版本的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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3602 次 |
| 最近记录: |