[英]Cmake Cannot specify include directories when use target target_include_directories
[英]SWIG and CMake: make use of information provided by `target_include_directories()`
使用 CMake 2.8+,您可以通過使用target_include_directories()避免重復設置包含目錄。
例如通過寫作
add_libary(mylib SHARED ${SOURCES})
target_include_directories(mylib PUBLIC ./include)
.. 您只需鏈接mylib
即可將所需的包含文件夾添加到您的目標。
但是,當我必須使用尚未使用此功能的 CMake 模塊時,如何利用此信息? (在我的情況下 SWIG)
當我配置 SWIG 項目時,我目前必須硬編碼很多信息:
set(SWIG_MODULE_${PYTHON_MODULE_NAME}_EXTRA_DEPS
"../long/relative/path/1/include/some/header1.h"
"../long/relative/path/1/include/some/header2.h"
"../long/relative/path/2/include/some/header1.h"
"../long/relative/path/2/include/some/header2.h")
我還必須使用老式的include_directories()
來讓swig
生成器知道它需要知道什么:
include_directories(
"../long/relative/path/1/include
"../long/relative/path/2/include)
否則.i
文件中的%include
語句將不再起作用。
當然,我可以設置包含路徑的變量,但隨后我會提供我想要刪除的信息。
有沒有辦法從目標中提取目錄信息或(當然更好)使 SWIG CMake 模塊正確使用它?
我目前的解決方案:
使用一些(非常漂亮的)CMake 魔法,您可以自動列出庫的接口部分中的所有頭文件並設置包含目錄:
function(swig_add_library_dependencies swig_module library_names)
foreach(library_name ${library_names})
get_property(LIBRARY_INCLUDES
TARGET ${library_name}
PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
foreach(INCLUDE_PATH ${LIBRARY_INCLUDES})
include_directories(${INCLUDE_PATH})
file(GLOB_RECURSE header_files "${INCLUDE_PATH}/*.h")
list(APPEND SWIG_MODULE_${swig_module}_EXTRA_DEPS ${header_files})
# export variable to parent scope
set(SWIG_MODULE_${swig_module}_EXTRA_DEPS
${SWIG_MODULE_${swig_module}_EXTRA_DEPS} PARENT_SCOPE)
endforeach()
endforeach()
endfunction()
像這樣使用:
swig_add_library_dependencies(<swig_module_name> "library1;library2")
或像這樣離散地:
swig_add_library_dependencies(<swig_module_name> library1)
swig_add_library_dependencies(<swig_module_name> library2)
缺點:
GLOB_RECURSE
查看get_property
的文檔:
https://cmake.org/cmake/help/v3.0/command/get_property.html?highlight=get_property
你會做這樣的事情:
get_property(MY_INCLUDES TARGET my_target PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
從目標 my_target 獲取接口包含目錄並將它們存儲在變量 MY_INCLUDES 中
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.