Как «зацепить» команду Cmake add_executable или add_library для запуска чего-то дополнительного? - PullRequest
1 голос
/ 17 апреля 2019

Мы строим с CMake и обычными make-файлами Unix. Есть некоторые проверки статического анализа, например, Cppcheck , мы запускаем каждый файл C / C ++ в проекте для обнаружения ошибок во время компиляции.

Я создал собственную цель для cppcheck и прикрепил ее к цели "all". Это проверяет все файлы * .c и * .cpp в проекте.

Мы хотим запускать проверку каждый раз, когда файл изменяется и перекомпилируется, и только для этого файла . Проверка должна выполняться автоматически, и пользователю не нужно добавлять дополнительные команды в CMake. По сути, проверка должна быть «подключена / подключена» к обычным командам CMake add_library() и add_executable(). Есть ли способ сделать это в CMake?

Ответы [ 2 ]

3 голосов
/ 17 апреля 2019

Хотя add_executableadd_library) предоставляется самим CMake, вы можете определить функцию или макрос с тем же именем, которые бы "скрывали" исходную функцию CMake.Внутри вашей функции / макроса вы можете вызывать оригинальную функцию CMake, используя префикс подчеркивания:

function(add_executable target_name)
   # Call the original function
   _add_executable(${target_name} ${ARGN})
   ... perform additional steps...
endfunction(add_executable target_name)
1 голос
/ 18 апреля 2019

Предполагается, что у вас есть список исходных файлов (который вы должны).

Перебирать исходные файлы с помощью цикла for_each. Для каждого исходного файла используйте add_custom_command, который запустит инструмент cppcheck для этого файла. Сделайте эту custom_command DEPEND для файла в текущем цикле. Теперь у вас должны быть пользовательские команды для всех отдельных исходных файлов, которые сработают, если и только если файлы изменятся из-за инструкции DEPENDS.

Не то чтобы эти команды должны были создавать какой-то выходной файл. Я предлагаю передать вывод команды cppcheck в файл с именем $ source $ _test.

Документация: https://cmake.org/cmake/help/latest/command/add_custom_command.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...