Как сгенерировать cscope.files из CMakeLists.txt

Я использую CMake для сборки своего кода. CMakeLists.txt содержит список всех файлов .C или .CPP и всех включаемых каталогов.

Как я могу реализовать CMakeLists.txt, чтобы я мог иметь make вариант, который генерирует для меня cscope.files, содержащий список всех файлов .C и .CPP (или .CXX), а также всех файлов .h из включенных в него каталогов?

Например, Я должен быть в состоянии бежать make cscopefiles и он сгенерирует cscope.files для меня.

Или уже есть такой вариант?

2

Решение

Вы также можете расширить ответ Фрейзера с помощью вызова 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 обновит выходной файл, только если результат отличается от его текущего содержимого.

3

Другие решения

Вы можете генерировать файл каждый раз, когда запускается CMake, добавляя что-то вроде следующего: (это предполагает, что ваш текущий список файлов состоит из двух переменных, называемых SourceFiles а также HeaderFiles)

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