是否有其他方法可以在cmake中获取目标的属性?

时间:2015-08-17 15:59:40

标签: cmake

我创建了一个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这样的变量。

1 个答案:

答案 0 :(得分:2)

不,CMake不会自动为目标(或其他任何东西)的属性定义变量。如果您需要属性的值,则必须显式查询(使用get_property或特定的getter,如get_target_property等。)

在您的具体情况下,INTERFACE_INCLUDE_DIRECTORIES是我希望您 根本不需要查询的属性。 INTERFACE_*属性的重点是自动传播使用要求;它们的传播是在CMake中实现的。