我在使用具有多个可执行文件的 CMake 组织我的项目时遇到问题。我有以下结构:
CmakeLists.txt
main.cpp
somelib.cpp
somelib.h
dir1
main.cpp
file1.h
file1.cpp
...
dir2
main.cpp
lib1.h
lib2.cpp
...
一般来说,我希望能够在 Clion 中选择可执行文件并独立运行任何项目,包括依赖于其他两个项目的外部项目。在外部main.cpp
我包括来自 dir1 和 dir2 的标头。dir1,dir2项目本身依赖于不同的库,如Boost
、Eigen
、Qt
等。使这种结构发挥作用的最佳方法是什么?我是 Cmake 的新手,多次尝试使用add_subdirectory
并没有让我更接近解决方案。我让它仅在我有外部 CmakeList 的情况下工作.txt并在使用 dir1、dir2 时将所有库都包含在那里,就像没有任何 CmakeLists.txt 的文件夹一样。我将不胜感激任何帮助。
从普通的CMake的角度来看 - 所以我不知道它如何与CLion相互作用,但您在评论中指出编写CMakeLists.txt
是重要的部分 - 一种方法是这样的:
- 有一个顶级的CMakeLists.txt它设置CMake参数,C++标准,编译器标志,选项等。
- 完成所有设置后,
add_subdirectory(dir1/)
和add_subdirectory(dir2/)
之后,顶级 - 目标需要什么,例如
add_executable(mytoplevelprogram main.cpp somelib.cpp)
.如果mytoplevelprogram的构建需要库中的标头,请使用合适的target_include_directories(mytoplevelprogram ...)
和/或链接到在子目录中创建的工件 - 在每个子目录 dir1 和dir2中,编写一个查找依赖项并使用合适的
add_executable()
命令为该子目录生成可执行文件的CMakeLists.txt
。
通常没有理由在源代码树中放置多个project()
命令。