【问题标题】:Is it possible to write a GLOB_RECURSE in cmake that ignores files ending in a certain way?是否可以在 cmake 中编写一个忽略以某种方式结尾的文件的 GLOB_RECURSE ?
【发布时间】:2021-01-22 05:49:51
【问题描述】:

我的 cmake 配置中有以下 GLOB_RECURSE 用于将所有 cpp 文件添加到我的项目中

file(GLOB_RECURSE SOURCES CONFIGURE_DEPENDS src/*.cpp)

是否可以添加一些规则来忽略某些文件?我想忽略名称中以 test.cpp 结尾的文件。

也许有这样的东西?

file(GLOB_RECURSE SOURCES CONFIGURE_DEPENDS src/*{!(test),}.cpp)

【问题讨论】:

  • 只是来自docs 的注释:“我们不建议使用 GLOB 从源代码树中收集源文件列表。如果添加或删除源时没有 CMakeLists.txt 文件更改那么生成的构建系统不知道什么时候要求 CMake 重新生成。CONFIGURE_DEPENDS 标志可能无法在所有生成器上可靠地工作,或者如果将来添加一个新的生成器不能支持它,使用它的项目将被卡住。即使 CONFIGURE_DEPENDS工作可靠,但每次重建时执行检查仍然需要成本。”

标签: c++ cmake


【解决方案1】:

也许您可以尝试使用 Negative Look ahead。但是这样做会更容易:

file(GLOB_RECURSE FILES CONFIGURE_DEPENDS src/*.cpp)

foreach( FILE ${FILES})
  if (${FILE} MATCHES test.cpp)
    list(APPEND TESTS ${FILE})
  else()
    list(APPEND SOURCES ${FILE})
  endif()
endforeach()

这样您可以使用源代码进行编译,并且您还可以准备好测试列表。

【讨论】:

    猜你喜欢
    • 2014-11-26
    • 1970-01-01
    • 2016-11-10
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 2017-04-19
    • 2010-10-26
    相关资源
    最近更新 更多