Я использую CMake для сборки своего кода. CMakeLists.txt содержит список всех файлов .C или .CPP и всех включаемых каталогов.
Как я могу реализовать CMakeLists.txt, чтобы я мог иметь make
вариант, который генерирует для меня cscope.files, содержащий список всех файлов .C и .CPP (или .CXX), а также всех файлов .h из включенных в него каталогов?
Например, Я должен быть в состоянии бежать make cscopefiles
и он сгенерирует cscope.files для меня.
Или уже есть такой вариант?
Вы также можете расширить ответ Фрейзера с помощью вызова 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 обновит выходной файл, только если результат отличается от его текущего содержимого.
Вы можете генерировать файл каждый раз, когда запускается CMake, добавляя что-то вроде следующего: (это предполагает, что ваш текущий список файлов состоит из двух переменных, называемых SourceFiles
а также HeaderFiles
)
set(AllFiles ${SourceFiles} ${HeaderFiles})
string(REPLACE ";" "\n" AllFiles "${AllFiles}")
file(WRITE ${CMAKE_BINARY_DIR}/cscope.files "${AllFiles}")