san*_*thy 2 c++ cmake setup-project clion
我正在尝试创建一个具有以下目录结构的 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
Run Code Online (Sandbox Code Playgroud)
作为 C++ 和 CMake 的新手,我有以下困惑,如果有人能在这里指导我正确的方向,我将非常高兴。
来自 Java 世界,我知道可以使用 pom.xml 中的模块标签在 Maven 项目中创建。CMake 中有类似的东西吗?如果是,我们该怎么称呼它,有人可以给我一个例子吗?
然后我想将此项目导入到 CLion 中,当我运行根项目时,应编译所有子模块并运行相关测试。
注意:submodule_1 和 submodule_2 没有使用彼此的代码。他们是完全独立的。但他们需要共享 root_folder/lib 中的一些公共库
预先非常感谢
您可以使用多个CMakeLists.txt文件,使用add_subdirectory语句。要声明库(将在另一个子项目中使用),请使用add_library. 声明应用程序 - add_executable. 将库链接到应用程序 - target_link_libraries(app1 PRIVATE utils common). 这是简短且非常常见的描述示例。还有更多选项和参数。
我在这里附上例子:
CMakeLists.txt
project(Example)
add_subdirectory(3rd-party)
add_subdirectory(apps)
add_subdirectory(libs)
Run Code Online (Sandbox Code Playgroud)
库/CMakeLists.txt
add_subdirectory(common)
add_subdirectory(utils)
Run Code Online (Sandbox Code Playgroud)
库/utils/CMakeLists.txt
FILE(GLOB SOURCES *.cpp *.h)
add_library(utils STATIC ${SOURCES})
target_include_directories(utils PUBLIC .)
Run Code Online (Sandbox Code Playgroud)
应用程序/CMakeLists.txt
add_subdirectory(app1)
add_subdirectory(app2)
Run Code Online (Sandbox Code Playgroud)
应用程序/app1/CMakeLists.txt
FILE(GLOB_RECURSE SOURCES src/*.cpp src/*.h)
add_executable(app1 ${SOURCES})
target_link_libraries(app1 PRIVATE utils common)
Run Code Online (Sandbox Code Playgroud)
在此示例中,库utils和common是独立的,可以在没有彼此且没有应用程序的情况下构建
| 归档时间: |
|
| 查看次数: |
2321 次 |
| 最近记录: |