我有以下项目结构:
project
- CMakeLists.txt
- src
- LibA
- CMakeLists.txt
- LibB
- CMakeLists.txt
根CMakeLists.txt看起来像这样:
add_subdirectory(LibA)
add_subdirectory(LibB)
add_executable(foo src/main.cpp)
target_link_libraries(foo LibA LibB)
但是,LibB 实际上也希望使用 LibA 中的一些功能。但是,我无法从 LibB 内部访问 LibA。但我也不能将其添加为子目录。这对我来说是一个真正的问题。我怎样才能最好地解决它?
提前谢谢。
解决方案有点复杂,但我希望以简化的方式解释它......
项目结构应为:
/src
|
+-- /lib-a
| +-- /includes
| +-- /sources
| +-- LibAConfig.cmake
| -- CMakeLists.txt
+-- /lib-b
| +-- /includes
| +-- /sources
| +-- LibBConfig.cmake
| -- CMakeLists.txt
-- /main
| +-- /includes
| +-- /sources
| -- CMakeLists.txt
-- CMakeLists.txt
/src/lib-a/LibAConfig.cmake应该是:
# Debug
MESSAGE ("-- Library A configuration...")
# Headers
include_directories(${CMAKE_CURRENT_LIST_DIR}/includes)
/src/lib-a/CMakeLists.txt应该是:
# Define project
project(LibA CXX)
# Debug
message("-- Working on "${CMAKE_CURRENT_SOURCE_DIR}"...")
# Package registration
set(LibA_DIR ${CMAKE_CURRENT_SOURCE_DIR} CACHE INTERNAL "")
# Project files
include_directories(includes)
file(GLOB _SOURCES sources/*.cpp)
# Go on with your module setup...
/src/lib-b/LibBConfig.cmake应该是:
# Debug
MESSAGE ("-- Library B configuration...")
# Headers
include_directories(${CMAKE_CURRENT_LIST_DIR}/includes)
/src/lib-b/CMakeLists.txt应该是:
# Define project
project(LibB CXX)
# Debug
message("-- Working on "${CMAKE_CURRENT_SOURCE_DIR}"...")
# Package registration
set(LibB_DIR ${CMAKE_CURRENT_SOURCE_DIR} CACHE INTERNAL "")
# Project files
include_directories(includes)
file(GLOB _SOURCES sources/*.cpp)
# Reference/Link to LIB-A
find_package(LibA)
# Go on with your module setup...
/src/main/CMakeLists.txt应该是:
# Define project
project(MainApp CXX)
# Debug
message("-- Working on "${CMAKE_CURRENT_SOURCE_DIR}"...")
# Project files
include_directories(includes)
file(GLOB _SOURCES sources/*.cpp)
# Reference/Link to LIB-A and LIB-B
find_package(LibA)
find_package(LibB)
# Go on with your module setup...
/src/CMakeLists.txt应该是:
# Define project
project(MyProject CXX)
# Debug
message("-- Working on "${CMAKE_CURRENT_SOURCE_DIR}"...")
add_subdirectory(lib-a)
add_subdirectory(lib-b)
add_subdirectory(main)
# Go on with your module setup...
我从我的一个项目中获得了上面的例子......