如何从CMakeLists.txt生成cscope.files

时间:2013-03-02 15:10:15

标签: c++ c cmake cscope

我正在使用CMake构建我的代码。 CMakeLists.txt包含所有.C或.CPP文件和所有包含目录的列表。

如何实现CMakeLists.txt以便我可以拥有一个make选项,为我生成包含所有.C和.CPP(或.CXX)文件列表的cscope.files以及所有文件来自其中包含目录的.h文件?

例如我应该可以运行make cscopefiles,它会为我生成cscope.files。

或者已经有这样的选择吗?

2 个答案:

答案 0 :(得分:3)

您还可以使用configure_file调用扩展Fraser的答案,因此最终文件仅在其内容发生更改时才会更改。

file(WRITE
  ${CMAKE_BINARY_DIR}/cscope.files.in
  "${AllFiles}")
configure_file(
  ${CMAKE_BINARY_DIR}/cscope.files.in
  ${CMAKE_BINARY_DIR}/cscope.files
  COPYONLY)

如果其他东西(自定义命令)依赖于cscope.files输出文件,那么这可以帮助最小化增量重建。 configure_file调用仅在结果与其当前内容不同时才更新输出文件。

答案 1 :(得分:2)

每次运行CMake时都可以通过添加以下内容生成文件:(这假设您当前的文件列表位于2个变量中,分别称为SourceFilesHeaderFiles

set(AllFiles ${SourceFiles} ${HeaderFiles})
string(REPLACE ";" "\n" AllFiles "${AllFiles}")
file(WRITE ${CMAKE_BINARY_DIR}/cscope.files "${AllFiles}")