CMake:为什么added_subdirectory对其他子目录不可见
CMake: Why is an added_subdirectory not visible to other subdirectories
我有以下项目结构:
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...
我从我的一个项目中获得了上面的例子......
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 在其他文件中创建类时在 c++ 项目中不起作用
- 类与私有变量的其他类之间的线程安全性
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 在子目录中使用target_sources()命令时用于单元测试(qtest)的项目结构
- GlobalAlloc而不是其他分配方法
- C++从其他 constexpr 创建 lambda 不能按顺序执行 Constexpr
- 断言中的Fold表达式在某些计算机上编译,但在其他计算机上不编译
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 结构和双指针隐藏在其他结构中,多层混淆
- UE4在OnComponentBeginOverlap上铸造其他actor
- 当我在其中一个线程执行中(在activemq-cpp中)捕获到特定值时,我如何终止/停止所有其他线程
- MESI协议和std::atomic-它是否确保所有写入立即对其他线程可见?
- 保留对其他类的成员函数的引用
- CMake:为什么added_subdirectory对其他子目录不可见