cmake - CMake 和 PC-Lint Plus - 如何将 CMake 的包含目录列表传递给 Lint?
问题描述
我正在尝试将 PC-Lint Plus 合并到我的 cmake 项目中,主要是每个PC-Lint 需要一个包含要扫描文件的所有包含路径的列表。如何获取 CMake 中目标递归所需的所有包含路径的列表?.
PC-Lint 正在被调用,但由于并非所有包含都在 PC-Lint 调用中而最终死亡。
我将上面的链接转储到 Lint.cmake 中,并将其包含在我的顶级 CMake 文件中。在我的项目文件中,我添加了:
if(COMMAND add_pc_lint)
add_pc_lint(moded ${SRC_FILES})
endif(COMMAND add_pc_lint)
所以我希望这些线路:
function(add_pc_lint target)
get_directory_property(lint_include_directories INCLUDE_DIRECTORIES)
# let's get those elephants across the alps
# prepend each include directory with "-i"; also quotes the directory
set(lint_include_directories_transformed)
foreach(include_dir ${lint_include_directories})
list(APPEND lint_include_directories_transformed -i"${include_dir}")
endforeach(include_dir)
将包含目录列表拉出INCLUDE_DIRECTORIES
.
如果我添加:
message(STATUS "********************************************")
message(STATUS "Include directories - ${lint_include_directories}")
message(STATUS "********************************************")
message(STATUS "********************************************")
message(STATUS "INCLUDE_DIRECTORIES - ${INCLUDE_DIRECTORIES}")
message(STATUS "********************************************")
在 foreach 循环的正上方,lint_include_directories
两者INCLUDE_DIRECTORIES
似乎都是空的。
我需要做什么才能从 CMake 获取包含目录的完整列表,包括 fromtarget_link_libraries
和target_include_directories
,以提供给 PC-Lint Plus?
解决方案
编辑:我已经更新了CMake PC-Lint 脚本,以解决我在此处的回复中描述的问题。
有关 PC-Lint 使用的文档似乎是针对旧 CMake 的,而不是基于目标的现代 CMake。该add_pc_lint
函数从 CMake 目录属性中获取包含目录并编译定义。如果您的项目有如下调用,这些目录属性将被填充:
include_directories()
add_definitions()
如果没有这些命令(在现代 CMake 中确实不应该使用),该add_pc_lint
函数可能无法找到您期望的所有包含目录和编译定义。
在现代 CMake 中,当您使用以下命令时,包含目录和编译定义被存储为目标的属性:
target_include_directories()
target_compile_definitions()
在这种情况下,您必须修改add_pc_lint
函数以从目标而不是目录中获取属性。add_pc_lint
因此,从这里更改函数的顶部:
function(add_pc_lint target)
get_directory_property(lint_include_directories INCLUDE_DIRECTORIES)
get_directory_property(lint_defines COMPILE_DEFINITIONS)
对此:
function(add_pc_lint target)
get_target_property(lint_include_directories ${target} INCLUDE_DIRECTORIES)
get_target_property(lint_defines ${target} COMPILE_DEFINITIONS)
推荐阅读
- python - max() 函数如何在以下代码中工作
- javascript - 如何将整个数组添加到 useState 变量
- sql - SQL database_id 值是否被重用?
- python - random.random() 在不同的机器上生成不同的数字
- scala - 哪些操作在流库中的拉取模型和推送模型中更容易实现(反之亦然)?
- r - Google Cloud Compute Engine 上的 xgboost 超慢
- c# - 如何使用 C# 和 Google 日历 API 创建 Google 日历活动?
- c# - ExecuteAsync 更改传递的动态参数名称
- python - 在 VS Code 中无法切换到 Python3
- javascript - 第一个 img 标签显示图像,第二个使用插值的标签不在 Vue.js 前端