首页 > 解决方案 > 如何“挂钩”到 Cmake 命令 add_executable 或 add_library 以运行额外的东西?

问题描述

我们使用 CMake 和普通的 Unix makefile 构建。有一些静态分析检查,例如Cppcheck,我们在项目中的每个 C/C++ 文件上运行以在编译时捕获错误。

我为 cppcheck 创建了一个自定义目标并将其附加到“全部”目标中。这将检查项目中的所有 *.c 和 *.cpp 文件。

我们希望在每次更改和重新编译文件时运行检查,并且仅在该文件上运行。检查应该自动运行,用户无需在 CMake 中添加额外的命令。本质上,检查应该“附加/挂钩”到正常的 CMake 命令add_library()add_executable(). 在 CMake 中有什么方法可以做到这一点吗?

标签: cmake

解决方案


虽然add_executable(and add_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)

推荐阅读