c++ - CMake:为什么 added_subdirectory 对其他子目录不可见

标签 c++ cmake

我有以下项目结构:

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...

上面的例子是我的一个项目...

关于c++ - CMake:为什么 added_subdirectory 对其他子目录不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52458581/

相关文章:

c++ - 统一迭代 std::vector<T> 和 std::vector<unique_ptr<T>>

c++ - c32rtomb 转换成什么编码?

c++ - 尽管找到了 cuda,CMAKE_CUDA_COMPILER 标志仍为 false

Android 无法解析类型 ulong64

cmake - 在哪里设置 ExternalProject 属性?

c++ - 未实现 : unexpected ast of kind ltgt_expr in C++

c# - C# 中的 VC++ __stdcall 回调

java - SWIG 和异常 : avoid using throw(Exception) in C++

c++ - std::array<std::vector> 中的大括号省略

c++ - CMake、C++ 和 Jenkins/持续集成