从cmake可执行文件获取所有包含文件夹

时间:2019-10-28 13:43:43

标签: cmake cppcheck conan

如何获取可执行文件的所有包含目录? 我要介绍cppcheck,我需要将所有包含目录转发到cppcheck(以及接口导入库的包含目录)。

例如,我有

add_executable(my_exe main.cpp)
target_link_libraries(my_exe PRIVATE RapidJSON::RapidJSON)

如何获取my_exe的所有相应包含目录,包括RapidJSON目录(例如〜/ .conan / data / RapidJSON / 1.1.0 / a / b / package / x / include)?

我尝试了以下尝试,但没有成功:-(

get_target_property(ALL_INCLUDES my_exe INTERFACE_INCLUDE_DIRECTORIES) # NOTFOUND
get_target_property(ALL_INCLUDES my_exe INCLUDE_DIRECTORIES) # empty
add_executable(my_exe main.cpp)
target_link_libraries(my_exe PRIVATE RapidJSON::RapidJSON)

# the following line should be adapted so that the variable cppcheck_includes also contains the RapidJSON include directories

set(cppcheck_includes           ${CMAKE_SOURCE_DIR}/includes) 

add_custom_target(cppcheck
        COMMAND cppcheck
        --enable=all
        --std=c++11
        --library=/usr/share/cppcheck/cfg/std.cfg
        --check-config
        ${cppcheck_includes}    
        main.cpp
)

我希望没有警告,但有警告:

Include file: <rapidjson/document.h> not found.

1 个答案:

答案 0 :(得分:0)

就我而言,我刚刚创建了一个目标,该目标运行Cppcheck并将项目的编译数据库用作输入-参见https://github.com/firewave/mame_regtest/blob/master/cppcheck.cmake

要生成编译数据库,您只需添加

set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

到您的CMakeLists.txt

您也可以在CMake中使用集成支持,但是我对此还没有经验。