用于平台相关设置变量值的 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”的变量即可。