具有多个可执行文件的 Cmake 项目



我在使用具有多个可执行文件的 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项目本身依赖于不同的库,如BoostEigenQt等。使这种结构发挥作用的最佳方法是什么?我是 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()命令。

最新更新