2013-03-02 58 views
2

我正在使用CMake构建我的代码。 CMakeLists.txt包含所有.C或.CPP文件以及所有包含目录的列表。如何从CMakeLists.txt生成cscope.files

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

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

或者有没有这样的选择?

回答

2

你可以每CMake的运行中加入类似下面的时间生成文件:(假设当前的文件列表是在2个变量称为SourceFilesHeaderFiles

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

您还可以扩展弗雷泽的回答使用configure_file调用,所以最终文件仅在其内容发生更改时才会更改。

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

不错的 - 我不知道!我会(应该)使用'execute_process(COMMAND $ {CMAKE_COMMAND} -E copy_if_different ...)'。 – Fraser 2013-03-07 19:40:53