【发布时间】: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.
【问题讨论】:
-
您似乎没有任何包含
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变量中。