我有一个由几个模块组成的项目,我想使用CMake的<meta name="viewport" content="width=device-width, initial-scale=1.0">
函数:
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
时会自动解决?
答案 0 :(得分:2)
有没有一种方法可以将对日志记录模块的依赖性编程到顶级模块的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)
注意,这假设您从项目的 root 运行CMake。例如,如果直接在lib/module1/CMakeLists.txt
文件上运行CMake,则它没有有权访问在根CMakeLists.txt
文件中定义的日志记录目标。