【问题标题】:Get all include folders from cmake executable从 cmake 可执行文件中获取所有包含文件夹
【发布时间】:2019-10-28 13:43:43
【问题描述】:

如何获取可执行文件的所有包含目录? 我要引入cppcheck,需要把所有的include目录转发给cppcheck(也是接口导入库的include目录)。

例如我有

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.

【问题讨论】:

  • Cppcheck support in CMake的可能重复
  • 您似乎没有任何包含my_exe 的目录。您实际上是否通过target_include_directories()include_directories() 调用添加了任何内容?另外,能否请您显示查找 RapidJSON 包的代码?
  • 你应该可以通过${CONAN_RAPIDJSON_ROOT}之类的变量访问rapidjson根文件夹,所以你应该可以调整你的cmake并添加rapidjson包含
  • 对于柯南使用,您需要包含生成的 cmake 文件 conanbuildinfo.cmake,或者,使用另一个生成器作为 cmake_find_package 或 cmake__paths
  • @ymochurad 是对的。更具体地说,有一个${CONAN_INCLUDE_DIRS_RAPIDJSON} 变量定义为详细的here。然后,您只需将两个路径连接到您的 cppcheck_includes 变量中。

标签: cmake cppcheck conan


【解决方案1】:

在我的例子中,我刚刚创建了一个运行 Cppcheck 并使用我项目的编译数据库作为输入的目标 - 请参阅 https://github.com/firewave/mame_regtest/blob/master/cppcheck.cmake

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

set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

致您的CMakeLists.txt

您也可以使用 CMake 中的集成支持,但我还没有这方面的经验。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    • 2020-05-09
    相关资源
    最近更新 更多