gpt4 book ai didi

c++ - 解决正交模块的依赖关系

转载 作者:行者123 更新时间:2023-12-01 14:22:43 28 4
gpt4 key购买 nike

我有一个由多个模块组成的项目,我想使用 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

这些顶层模块相互独立,但都依赖于logging模块。当我将相关的顶级模块代码从根 CMakeLists 移动到特定的子目录时,我无法使用 make 编译它们,因为缺少日志记录模块。

有没有办法将日志模块的依赖编程到顶层模块的CMakeLists中,或者在根目录中调用cmake时自动解析目录?

最佳答案

Is there a way to program the dependency on the logging module into CMakeLists of the top-level modules...

是的,您可以在根 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)

请注意,这假设您从项目的root 运行 CMake。例如,如果您直接在 lib/module1/CMakeLists.txt 文件上运行 CMake,它将不能访问根 CMakeLists 中定义的日志记录目标.txt 文件。

关于c++ - 解决正交模块的依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62201808/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com