我正在尝试创建一个具有以下目录结构的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中的modules标记在maven项目中创建。在CMake中有与此等效的东西吗?如果是的话,我们怎么称呼它,有人可以给我一个例子吗?
然后,我想将该项目导入CLion,然后在运行根项目时,应编译所有子模块并运行相关测试。
注意:submodule_1和submodule_2没有使用彼此的代码。他们是完全独立的。但是他们需要从root_folder / lib共享一些通用库
在此先多谢
您可以使用几个CMakeLists.txt
文件,使用add_subdirectory
语句。要声明库(将在另一个子项目中使用),请使用add_library
。声明app- add_executable
。将库链接到app- target_link_libraries(app1 PRIVATE utils common)
。这是简短且非常常见的描述示例。还有更多的选项和参数。
另外,我还将附加一些示例,其中包括一些库,应用程序,CMake文件,目录结构。那里缺少什么:实际的* h和* cpp文件-它们不在范围内。我建议您看一下:
我还在这里附上示例:
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
它们是独立的,可以相互构建且无需应用程序
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句