具有独立子项目的 CMake 项目

CMake project with independent subprojects

我正在尝试创建一个具有以下目录结构的 cmake 项目:

root_folder
 lib
   common_library_for_all_submodules
 submodule_1
   src
    main.cpp
   tests
    main_test.cpp
 submodule_2
   src
    main.cpp
   tests
    main_test.cpp
 

作为 C++ 和 CMake 的新手,我有以下困惑,如果有人能在这里指导我正确的方向,我将非常高兴。

  1. 来自 Java 世界,我知道这可以使用 pom.xml 中的模块标签在 Maven 项目中创建。在 CMake 中是否有与此等效的内容?如果是,我们怎么称呼它,有人可以给我举个例子吗?

  2. 然后我想将这个项目导入 CLion,当我 运行 根项目时,应该编译所有子模块并且相关测试是 运行.

注意:submodule_1 和 submodule_2 没有使用彼此的代码。他们是完全独立的。但是他们需要共享 root_folder/lib

中的一些公共库

非常感谢

您可以使用多个CMakeLists.txt 文件,使用add_subdirectory 语句。要声明库(将在另一个子项目中使用),请使用 add_library。声明应用程序 - add_executable。从 link 图书馆到应用程序 - target_link_libraries(app1 PRIVATE utils common)。这是简短且非常常见的描述示例。还有更多选项和参数。

我在这里附上例子:

CMakeLists.txt

project(Example)

add_subdirectory(3rd-party)
add_subdirectory(apps)
add_subdirectory(libs)

libs/CMakeLists.txt

add_subdirectory(common)
add_subdirectory(utils)

libs/utils/CMakeLists.txt

FILE(GLOB SOURCES *.cpp *.h)

add_library(utils STATIC ${SOURCES})

target_include_directories(utils PUBLIC .)

apps/CMakeLists.txt

add_subdirectory(app1)
add_subdirectory(app2)

apps/app1/CMakeLists.txt

FILE(GLOB_RECURSE SOURCES src/*.cpp src/*.h)

add_executable(app1 ${SOURCES})
target_link_libraries(app1 PRIVATE utils common)

在此示例中,库 utilscommon 是独立的,可以在没有彼此且没有应用程序的情况下构建