【问题标题】:A cmake macro for platform dependent setting variable value用于平台相关设置变量值的 cmake 宏
【发布时间】:2020-10-14 14:26:15
【问题描述】:

我正在 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

有人知道我做错了什么吗?

【问题讨论】:

    标签: cmake macros cross-platform


    【解决方案1】:

    在宏里面你需要dereferencename来获取参数的value

    set(${name} ${msvc_val})
    

    按当前代码

    set(name ${msvc_val})
    

    您只需使用名称“name”定义变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-24
      • 2012-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多