如何使用CMake进行cpplint代码样式检查?
我找到的唯一在线资源是如何使用CMake进行cpplint代码样式检查?,cmake,cpplint,Cmake,Cpplint,我找到的唯一在线资源是CMake\uuu CPPLINT(link)上的CMake文档和这个示例(link),但我不知道如何在CMakeLists.txt文件中实际使用它。 我尝试了提供的例子,但我不能使它工作。仅供参考,我已按照说明安装了cpplint 现在,我可以使用以下CMake命令在CMakeLists.txt内运行cpplint python脚本: execute_process(COMMAND cpplint path/To/File/To/Analyse.cpp) 但是,我很确定
CMake\uuu CPPLINT
(link)上的CMake文档和这个示例(link),但我不知道如何在CMakeLists.txt文件中实际使用它。
我尝试了提供的例子,但我不能使它工作。仅供参考,我已按照说明安装了cpplint
现在,我可以使用以下CMake命令在CMakeLists.txt内运行cpplint python脚本:
execute_process(COMMAND cpplint path/To/File/To/Analyse.cpp)
但是,我很确定这不是正确的方法。我没有使用
CMAKE\uuu CPPLINT
检查代码样式
我使用add\u custom\u target
创建它
如果仍然存在一些问题,.我无法使用
CMAKE\uuu CPPLINT
检查代码样式
我使用add\u custom\u target
创建它
如果仍然存在一些问题,.丹尼尔·普费弗的《有效的CMake》()中介绍了将静态分析工具用于CMake的推荐方法 您可以在调用
cmake
时定义它,例如:
cmake "-DCMAKE_CXX_CPPLINT=cpplint" ..
或者将其放入CMakeLists.txt
:
set(CMAKE_CXX_CPPLINT "cpplint")
推荐的选项是第一个(我们不应该在项目中定义什么不是项目需求)
CMake将为编译的每个文件调用cpplint
。您可以在分号后传递额外的参数(例如,-DCMAKE\u CXX\u CPPLINT=CPPLINT;--linelength=100
)
这种方法的缺点是:
cpplint
)cpplint
扫描)请注意,您可以以相同的方式使用其他静态分析工具:
- Clan-Tidy
“-DCMAKE\u CXX\u CLANG\u Tidy=/usr/bin/CLANG-Tidy-3.9;-checks=*”
- CppCheck
“-DCMAKE\u CXX\u CppCheck=/usr/bin/CppCheck;--std=c++11”
- IWYU
“-DCMAKE\u CXX\u INCLUDE\u你使用的东西=/usr/bin/IWYU;-可传递的\u仅包括”
- LWYU
cmake-DCMAKE\u LINK\u你用什么=真
- 克拉齐
其中一些需要“编译数据库”(
set(CMAKE\u EXPORT\u COMPILE\u COMMANDS ON)
)。Daniel Pffeifer的《有效的CMAKE》()中介绍了将静态分析工具用于CMAKE的推荐方法
您可以在调用cmake
时定义它,例如:
cmake "-DCMAKE_CXX_CPPLINT=cpplint" ..
或者将其放入CMakeLists.txt
:
set(CMAKE_CXX_CPPLINT "cpplint")
推荐的选项是第一个(我们不应该在项目中定义什么不是项目需求)
CMake将为编译的每个文件调用cpplint
。您可以在分号后传递额外的参数(例如,-DCMAKE\u CXX\u CPPLINT=CPPLINT;--linelength=100
)
这种方法的缺点是:
cpplint
)cpplint
扫描)请注意,您可以以相同的方式使用其他静态分析工具:
- Clan-Tidy
“-DCMAKE\u CXX\u CLANG\u Tidy=/usr/bin/CLANG-Tidy-3.9;-checks=*”
- CppCheck
“-DCMAKE\u CXX\u CppCheck=/usr/bin/CppCheck;--std=c++11”
- IWYU
“-DCMAKE\u CXX\u INCLUDE\u你使用的东西=/usr/bin/IWYU;-可传递的\u仅包括”
- LWYU
cmake-DCMAKE\u LINK\u你用什么=真
- 克拉齐
其中一些需要“编译数据库”(
set(CMAKE\u EXPORT\u COMPILE\u命令打开)
)。首先,非常感谢您的提问。我一直在努力解决同样的问题
我用CMake 3.10.2试过了,用户2449761的评论仍然正确。使用set(CMAKE_CXX_CPPLINT“CPPLINT”)仍然不会检查任何头文件
kgbook的答案不再有效,因为aux_source_目录没有列出头文件。但是,您可以使用
get_target_property(src staticcodecheck SOURCES)
这将为您提供所有非系统标题。其余的可以保持不变。至于在特定时间运行cpplint,您可以尝试
add_custom_command(TARGET ${TARGET}
PRE_BUILD
...
这将替换他的cpplint.cmake中的add_custom_target(${target_NAME}…)
希望这能有所帮助。首先,非常感谢你的提问。我一直在努力解决同样的问题 我在CMake 3.10.2上试用过,用户2449761的评论仍然正确。使用set(CMake_CXX_CPPLINT“CPPLINT”)仍然不会检查任何头文件 kgbook的答案不再有效,因为aux_source_目录不列出头文件
get_target_property(src staticcodecheck SOURCES)
这将为您提供所有非系统标头。其余的可以保持不变。对于在特定时间运行cpplint,您可以尝试
add_custom_command(TARGET ${TARGET}
PRE_BUILD
...
这将替换他的cpplint.cmake中的add_custom_target(${target_NAME}…)
希望这有帮助。谢谢您的回答。如何确保此自定义目标在所有其他应用程序目标之后运行?谢谢您的回答。如何确保此自定义目标在所有其他应用程序目标之后运行?