【发布时间】:2019-08-02 08:06:14
【问题描述】:
我想使用 CMake 和 Ninja 启用 code analysis:
file(GLOB_RECURSE sources *.cpp)
target_sources(${target}
PRIVATE
${sources}
)
target_compile_options(${target}
PRIVATE
-analyze:log report.xml
-analyze:ruleset "${RuleSet}"
-analyze:quiet
)
生成的build.ninja大致如下(省略了很多不相关的数据):
build foo.cpp.obj: CXX_COMPILER foo.cpp:
FLAGS = -analyze:log report.xml -analyze:ruleset "C:\rulesets\MixedRecommendedRules.ruleset" -analyze:quiet
build bar.cpp.obj: CXX_COMPILER bar.cpp
FLAGS = -analyze:log report.xml -analyze:ruleset "C:\rulesets\MixedRecommendedRules.ruleset" -analyze:quiet
问题在于每个源文件都是单独编译的,因此每次调用编译器时报告都会被覆盖。
有没有办法像这样包含源文件名:
target_compile_options(${target}
PRIVATE
-analyze:log report_{source_file}.xml
-analyze:ruleset "${RuleSet}"
-analyze:quiet
)
【问题讨论】:
-
您可以iterate 覆盖
source列表中的所有文件,也可以单独set the property。