Получить все включаемые папки из исполняемого файла cmake

Как я могу получить все каталоги включения моего исполняемого файла? Я хочу ввести 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.

person Totschi    schedule 28.10.2019    source источник
comment
Возможный дубликат поддержки Cppcheck в CMake   -  person arved    schedule 28.10.2019
comment
Похоже, что у вас нет включаемых каталогов для my_exe. Вы на самом деле добавили какие-либо вызовы через target_include_directories() или include_directories()? Кроме того, не могли бы вы показать код, который находит пакет RapidJSON?   -  person squareskittles    schedule 28.10.2019
comment
У вас должна быть возможность доступа к корневой папке rapidjson через переменную типа ${CONAN_RAPIDJSON_ROOT}, поэтому вы сможете адаптировать свой cmake и добавить Rapidjson.   -  person ymochurad    schedule 28.10.2019
comment
Для использования Conan вам необходимо включить файл cmake, сгенерированный conanbuildinfo.cmake, или использовать другой генератор как cmake_find_package или cmake__paths.   -  person uilianries    schedule 28.10.2019
comment
@ymochurad прав. В частности, существует переменная ${CONAN_INCLUDE_DIRS_RAPIDJSON}, которая подробно описана здесь. Затем вам просто нужно объединить оба пути в вашу переменную cppcheck_includes.   -  person Jean-Mathieu Vermosen    schedule 21.11.2019


Ответы (1)


В моем случае я только что создал цель, которая запускает Cppcheck и использует базу данных компиляции моего проекта в качестве входных данных - см. https://github.com/firewave/mame_regtest/blob/master/cppcheck.cmake.

Чтобы создать базу данных компиляции, вам просто нужно добавить

set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

к вашему CMakeLists.txt.

Вы также можете использовать встроенную поддержку в CMake, но у меня пока нет опыта в этом.

person Firewave    schedule 17.12.2020