我们使用CMake和普通的Unix makefile进行构建。有一些静态分析检查,例如:Cppcheck,我们在项目中的每个C/C++文件上运行,以在编译时捕获错误。
我已经为cppcheck创建了一个自定义目标,并将其附加到“all”目标中。这将检查项目中的所有 *.c和 *.cpp文件。
我们希望在每次文件被更改和重新编译时都运行一次检查,并且只在该文件上运行。检查应该自动运行,用户不必在CMake中添加额外的命令。本质上,检查应该“附加/挂钩”到普通的CMake命令add_library()
和add_executable()
。有没有办法在CMake中做到这一点?
3条答案
按热度按时间mftmpeh81#
虽然
add_executable
(和add_library
)是由CMake本身提供的,但您可以定义一个同名的函数或宏,这将“隐藏”原始的CMake函数。在你的函数/宏中,你可以使用下划线前缀的名字调用原始的CMake函数:jc3wubiy2#
假设你有一个源文件列表(你应该有)。
使用for_each循环迭代源文件。对于每个源文件,使用add_custom_command对文件运行cppcheck工具。使custom_command依赖于当前循环中的文件。现在,您应该有针对所有单个源文件的自定义命令,当且仅当文件因DEPENDS指令而更改时,才会触发这些命令。
并不是说这些命令必须创建某种输出文件。我建议将cppcheck的输出通过管道传输到名为$source$_test的文件中。
文件:https://cmake.org/cmake/help/latest/command/add_custom_command.html
rxztt3cl3#
您可以从tacklelib库尝试连接功能:https://github.com/andry81/tacklelib/blob/master/cmake/tacklelib/Handlers.cmake
我不保证它会对系统函数起作用,但你可以按照测试中的示例进行尝试:https://github.com/andry81/tacklelib/blob/master/cmake_tests/unit/01_script_mode/11_Handlers/
测试中的一些示例: