解析正交模块的依赖关系
Resolving dependencies of orthogonal modules
我有一个由几个模块组成的项目,我想使用 CMake 的add_subdirectory
函数:
Project
+ CMakeLists.txt
+ bin
+ (stuff that depends on lib/)
+ lib
module1
+ CMakeLists.txt
+ (cpp,hpp)
module2
+ CMakeLists.txt
+ (cpp,hpp)
module3
+ CMakeLists.txt
+ (cpp,hpp)
logging.cpp
logging.hpp
这些顶级模块彼此独立,但它们都依赖于日志记录模块。 当我将相关的顶级模块代码从根CMakeLists
移动到特定的子目录中时,由于缺少日志记录模块,我无法使用make
编译它们。
有没有办法将对日志记录模块的依赖性编程为顶级模块CMakeLists
,还是在根目录中调用cmake
时自动解析?
有没有办法将对日志记录模块的依赖性编程到顶级模块的 CMakeList 中......
是的,您可以在根 CMakeLists.txt 文件中为日志记录功能定义 CMake 库目标。
CMakeLists.txt
:
cmake_minimum_required(VERSION 3.16)
project(MyBigProject)
# Tell CMake to build a shared library for the 'logging' functionality.
add_library(LoggingLib SHARED
lib/logging.cpp
)
target_include_directories(LoggingLib PUBLIC ${CMAKE_SOURCE_DIR}/lib)
# Call add_subdirectory after defining the LoggingLib target.
add_subdirectory(lib/module1)
add_subdirectory(lib/module2)
add_subdirectory(lib/module3)
...
然后,只需将日志记录库目标链接到需要它的其他模块目标即可。例如:
lib/module1/CMakeLists.txt
:
project(MyModule1)
# Tell CMake to build a shared library for the 'Module1' functionality.
add_library(Module1Lib SHARED
...
)
# Link the LoggingLib target to your Module1 library target.
target_link_libraries(Module1Lib PRIVATE LoggingLib)
请注意,这假定您从项目的根目录运行 CMake。例如,如果直接在lib/module1/CMakeLists.txt
上运行 CMake,它将无法访问根CMakeLists.txt
文件中定义的日志记录目标。
相关文章:
- C++GTKMM gui循环依赖关系
- 如何在头文件中声明类模板(由于循环依赖关系)
- 对在不同二进制文件中创建的对象文件的依赖关系
- 使用Bazel构建具有不同编译器/链接器选项的C/C++依赖关系
- OpenVINO - 推理库插件 libMKLDNNPlugin.so 无法解析依赖关系
- 模拟测试中类的依赖关系
- C++模板方法中的循环依赖关系
- 解析正交模块的依赖关系
- 如何在 Mac OS 上安装 boost-mpi 及其对 clang 的依赖关系?
- Wt::D bo 中的循环依赖关系
- 在包含窗口标头时难以解决循环依赖关系问题
- 当依赖关系和依赖关系都是多态时,在哪个继承级别存储依赖关系指针?
- 解决循环依赖关系 c++ 的想法
- C++循环依赖关系,未声明的标识符
- C++ 中的循环依赖关系问题
- 为什么包含需要进一步的依赖关系?
- 使用 cmake 获取外部依赖关系
- CMake 外部和内部静态库的循环依赖关系
- 在没有Xcode的macOS中开发具有依赖关系的应用程序
- "std::shared_ptr"循环依赖关系是如何导致问题的