用于平台相关设置变量值的 cmake 宏
A cmake macro for platform dependent setting variable value
我正在 cmake 中编写实用程序宏,用于设置依赖于平台的变量。理论上它应该很简单,但我不知道为什么我的变量没有被设置。这是宏:
macro(SetCrossPlatform name msvc_val linux_val macos_val)
#macro(SetCrossPlatform VAR name MSVC msvc_val LINUX linux_val MACOS macos_val) # alternative signature that I tried
MESSAGE(STATUS "PLATFORM ${PLATFORM}")
if (PLATFORM STREQUAL "windows-msvc")
set(name ${msvc_val})
elseif (PLATFORM STREQUAL "linux")
set(name ${linux_val})
elseif (PLATFORM STREQUAL "macos")
set(name ${macos_val})
endif ()
endmacro()
调用方式如下:
#SetCrossPlatform(VAR Variable MSVC "microsoft" LINUX "ubuntu" MACOS "apple") # try other signature
SetCrossPlatform(Variable "microsoft" "ubuntu" "apple")
message(STATUS "Variable ${Variable}")
这会产生:
-- PLATFORM windows-msvc
-- Variable # <--- Should print out "-- Variable microsoft"
-- Configuring done
-- Generating done
有人知道我做错了什么吗?
在宏中你需要取消引用 name
以获得参数的值:
set(${name} ${msvc_val})
按当前代码
set(name ${msvc_val})
您只需定义名称为“name”的变量即可。
我正在 cmake 中编写实用程序宏,用于设置依赖于平台的变量。理论上它应该很简单,但我不知道为什么我的变量没有被设置。这是宏:
macro(SetCrossPlatform name msvc_val linux_val macos_val)
#macro(SetCrossPlatform VAR name MSVC msvc_val LINUX linux_val MACOS macos_val) # alternative signature that I tried
MESSAGE(STATUS "PLATFORM ${PLATFORM}")
if (PLATFORM STREQUAL "windows-msvc")
set(name ${msvc_val})
elseif (PLATFORM STREQUAL "linux")
set(name ${linux_val})
elseif (PLATFORM STREQUAL "macos")
set(name ${macos_val})
endif ()
endmacro()
调用方式如下:
#SetCrossPlatform(VAR Variable MSVC "microsoft" LINUX "ubuntu" MACOS "apple") # try other signature
SetCrossPlatform(Variable "microsoft" "ubuntu" "apple")
message(STATUS "Variable ${Variable}")
这会产生:
-- PLATFORM windows-msvc
-- Variable # <--- Should print out "-- Variable microsoft"
-- Configuring done
-- Generating done
有人知道我做错了什么吗?
在宏中你需要取消引用 name
以获得参数的值:
set(${name} ${msvc_val})
按当前代码
set(name ${msvc_val})
您只需定义名称为“name”的变量即可。