【问题标题】:Should I separate CMakeList.txt from source folder?我应该将 CMakeList.txt 与源文件夹分开吗?
【发布时间】:2011-09-30 16:40:31
【问题描述】:

我是构建工具的新手,当我遇到 Autotool 时,我可以选择在顶部构建文件夹中只编写一个 Makefile.am 并将包含所有 cpp 文件的源文件夹保持干净。我可以使用 VPATH 告诉 automake 在该文件夹中查找源代码,而不是在每个地方都写 /src/。 (在这里参考我的老问题:Automake Variables to tidy up Makefile.am

但是在我看来,CMake 没有要设置的 VPATH,周围的一些狐狸说不可能这样做。所以有两种选择:

  • 在源文件夹中创建 CMakeList.txt
  • 在顶部构建文件夹中创建 CMakeList.txt 并保留源代码,但我需要将“/src”扩展到每个源代码文件。

哪个更常用?我更喜欢第二个,因为它使我的源代码从任何构建相关源中都保持干净。在那种情况下,无论如何要摆脱“/src”?

【问题讨论】:

    标签: c++ build cmake


    【解决方案1】:

    在我们公司,我们使用第一个选项,在每个子目录中都有一个 CMakeLists.txt,并使用 add_subdirectory 命令从根 CMakeLists.txt 构建树。

    这是一种模块化方法,其中每个子组件(想想项目有不同的部分,比如 boost 被分成系统、线程、日期时间等)都有自己的构建文件。如果用户想要,他可以只构建子组件或构建整个项目。

    我们还使用它作为在项目中包含可选子组件的简单方法。然后用户可以设置一个像BUILD_SUBFOO这样的布尔值,如果这个布尔值是TRUEadd_subdirectory就会被执行。

    知名项目也在使用这种方法。这是来自 KDevelop 的根 CMakeLists.txt 的链接(请查看第 52-62 行)。

    【讨论】:

      【解决方案2】:

      我很确定你可以做到:

      FILE(GLOB Source_files src/*.cpp)
      

      这正是你想要的。

      【讨论】:

      • 你也可以使用FILE(GLOB_RECURSE Source_files src/*.cpp),所以如果你在src/下的源文件被拆分成文件夹,它会自动获取。
      • 您没有回答这两个选项中哪一个更好且更常用?而如果我指定add_executable(test test.cpp),src/test.cpp会定位吗?
      • 请注意,使用 GLOB,如果您添加一个新的 src/.cpp 文件,在您再次运行 cmake 之前,它不会被拾取和编译。 touch CMakeLists.txt 就足够了,但这种方法是个问题。
      猜你喜欢
      • 1970-01-01
      • 2016-01-03
      • 2020-11-15
      • 1970-01-01
      • 2013-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-30
      相关资源
      最近更新 更多