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

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

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

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

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


person ruben2020    schedule 02.03.2013    source источник


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

person DLRdave    schedule 07.03.2013
comment
Прикольно - не знал! Я бы (должен был) использовать execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ...). - person Fraser; 07.03.2013

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

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