我创建了一个C ++静态库,为了使其易于搜索,我创建了以下cmake文件:
lib.cmake
# The installation prefix configured by this project.
set(_IMPORT_PREFIX "C:/------/install/win32")
# Create imported target boost
add_library(lib STATIC IMPORTED)
set_target_properties(lib PROPERTIES
INTERFACE_COMPILE_DEFINITIONS "lib_define1;lib_define2"
INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/../include"
)
# Load information for each installed configuration.
get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
file(GLOB CONFIG_FILES "${_DIR}/lib-*.cmake")
foreach(f ${CONFIG_FILES})
include(${f})
endforeach()
LIB-debug.cmake
# Import target "boost" for configuration "Debug"
set_property(TARGET lib APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
set_target_properties(boost PROPERTIES
IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "CXX"
IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/Debug/staticlib/lib.lib"
)
当我想在可执行文件中使用这个库时,我可以通过调用find_package命令来调用它:
find_package(lib REQUIRED)
if(lib_FOUND)
message("lib has been found")
else()
message("lib cannot be found")
endif(boost_FOUND)
它有效,如果我想知道库的头文件目录,我将不得不这样称呼它:
get_target_property(lib_dir lib INTERFACE_INCLUDE_DIRECTORIES)
我只是想知道是否有其他方法可以获得目标的属性。在这种情况下,我希望存在一些像lib_INCLUDE_DIRECTORIES
这样的变量。
答案 0 :(得分:2)
不,CMake不会自动为目标(或其他任何东西)的属性定义变量。如果您需要属性的值,则必须显式查询(使用get_property
或特定的getter,如get_target_property
等。)
在您的具体情况下,INTERFACE_INCLUDE_DIRECTORIES
是我希望您 根本不需要查询的属性。 INTERFACE_*
属性的重点是自动传播使用要求;它们的传播是在CMake中实现的。