为什么要为 CACHE 变量设置 STRINGS 属性?
Why set STRINGS property for a CACHE variable?
嗯,我总是很难理解 cmake 文档,但是关于 set_property 我无法理解,尤其是在这个例子中,取自 Openpose 的 CMakeLists。
# Select the DL Framework
set(DL_FRAMEWORK CAFFE CACHE STRING "Select Deep Learning Framework.")
if (WIN32)
set_property(CACHE DL_FRAMEWORK PROPERTY STRINGS CAFFE)
else (WIN32)
set_property(CACHE DL_FRAMEWORK PROPERTY STRINGS CAFFE NV_CAFFE)
# set_property(CACHE DL_FRAMEWORK PROPERTY STRINGS CAFFE NV_CAFFE PYTORCH TENSORFLOW)
endif (WIN32)
# Suboptions for Caffe DL Framework
include(CMakeDependentOption)
if (${DL_FRAMEWORK} MATCHES "CAFFE" OR ${DL_FRAMEWORK} MATCHES "NV_CAFFE")
CMAKE_DEPENDENT_OPTION(BUILD_CAFFE "Build Caffe as part of OpenPose." ON
"DL_FRAMEWORK" ON)
# OpenPose flags
add_definitions(-DUSE_CAFFE)
# Nvidia NVCaffe
if (${DL_FRAMEWORK} MATCHES "NV_CAFFE")
MESSAGE(STATUS "Using NVIDIA NVCaffe")
add_definitions(-DNV_CAFFE)
endif (${DL_FRAMEWORK} MATCHES "NV_CAFFE")
endif (${DL_FRAMEWORK} MATCHES "CAFFE" OR ${DL_FRAMEWORK} MATCHES "NV_CAFFE")
我理解 CACHE 变量,但是这两个 set_property 的作用是什么,因为变量 ${DL_FRAMEWORK} 似乎被检查为纯文本,如“CAFFE”或“ NV_CAFFE".
这是完整的 CMakeLists.txt:
https://github.com/CMU-Perceptual-Computing-Lab/openpose/blob/master/CMakeLists.txt
我也可能误解了属性是如何工作的。
感谢您的宝贵时间!
命令
set_property(CACHE DL_FRAMEWORK PROPERTY STRINGS CAFFE NV_CAFFE)
为 CACHE 变量 DL_FRAMEWORK
设置 STRINGS 属性。
如果使用 CMake GUI 配置项目,则通常会在不设置任何变量的情况下执行第一个配置。
在第一次配置之后,可能希望设置(更改)变量 DL_FRAMEWORK
。 STRING
提供了一个将被建议的值列表。所以不需要输入例如“NV_CAFFE”但可以从列表中select它。
嗯,我总是很难理解 cmake 文档,但是关于 set_property 我无法理解,尤其是在这个例子中,取自 Openpose 的 CMakeLists。
# Select the DL Framework
set(DL_FRAMEWORK CAFFE CACHE STRING "Select Deep Learning Framework.")
if (WIN32)
set_property(CACHE DL_FRAMEWORK PROPERTY STRINGS CAFFE)
else (WIN32)
set_property(CACHE DL_FRAMEWORK PROPERTY STRINGS CAFFE NV_CAFFE)
# set_property(CACHE DL_FRAMEWORK PROPERTY STRINGS CAFFE NV_CAFFE PYTORCH TENSORFLOW)
endif (WIN32)
# Suboptions for Caffe DL Framework
include(CMakeDependentOption)
if (${DL_FRAMEWORK} MATCHES "CAFFE" OR ${DL_FRAMEWORK} MATCHES "NV_CAFFE")
CMAKE_DEPENDENT_OPTION(BUILD_CAFFE "Build Caffe as part of OpenPose." ON
"DL_FRAMEWORK" ON)
# OpenPose flags
add_definitions(-DUSE_CAFFE)
# Nvidia NVCaffe
if (${DL_FRAMEWORK} MATCHES "NV_CAFFE")
MESSAGE(STATUS "Using NVIDIA NVCaffe")
add_definitions(-DNV_CAFFE)
endif (${DL_FRAMEWORK} MATCHES "NV_CAFFE")
endif (${DL_FRAMEWORK} MATCHES "CAFFE" OR ${DL_FRAMEWORK} MATCHES "NV_CAFFE")
我理解 CACHE 变量,但是这两个 set_property 的作用是什么,因为变量 ${DL_FRAMEWORK} 似乎被检查为纯文本,如“CAFFE”或“ NV_CAFFE".
这是完整的 CMakeLists.txt: https://github.com/CMU-Perceptual-Computing-Lab/openpose/blob/master/CMakeLists.txt
我也可能误解了属性是如何工作的。
感谢您的宝贵时间!
命令
set_property(CACHE DL_FRAMEWORK PROPERTY STRINGS CAFFE NV_CAFFE)
为 CACHE 变量 DL_FRAMEWORK
设置 STRINGS 属性。
如果使用 CMake GUI 配置项目,则通常会在不设置任何变量的情况下执行第一个配置。
在第一次配置之后,可能希望设置(更改)变量 DL_FRAMEWORK
。 STRING
提供了一个将被建议的值列表。所以不需要输入例如“NV_CAFFE”但可以从列表中select它。