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

时间:2020-11-01 15:42:12

标签: c++ cmake clion

我在使用带有多个可执行文件的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进行多次尝试并没有使我更接近解决方案。仅当我具有外部CmakeLists.txt并在使用dir1,dir2时将所有库包括在其中时,才使它起作用,就像其中没有任何CmakeLists.txt的文件夹一样。我将不胜感激。

1 个答案:

答案 0 :(得分:1)

从简单的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 中,编写一个CMakeLists.txt来查找依赖项并为该子目录构建可执行文件,并带有合适的{{1 }}命令。

通常没有理由在源代码树中放置多个add_executable()命令。