具有独立子项目的 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 的新手,我有以下困惑,如果有人能在这里指导我正确的方向,我将非常高兴。
来自 Java 世界,我知道这可以使用 pom.xml 中的模块标签在 Maven 项目中创建。在 CMake 中是否有与此等效的内容?如果是,我们怎么称呼它,有人可以给我举个例子吗?
然后我想将这个项目导入 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)
在此示例中,库 utils
和 common
是独立的,可以在没有彼此且没有应用程序的情况下构建
我正在尝试创建一个具有以下目录结构的 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 的新手,我有以下困惑,如果有人能在这里指导我正确的方向,我将非常高兴。
来自 Java 世界,我知道这可以使用 pom.xml 中的模块标签在 Maven 项目中创建。在 CMake 中是否有与此等效的内容?如果是,我们怎么称呼它,有人可以给我举个例子吗?
然后我想将这个项目导入 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)
在此示例中,库 utils
和 common
是独立的,可以在没有彼此且没有应用程序的情况下构建