如何在ExternalProject_Add的CMAKE_ARGS中传递多值CMAKE_OSX_ARCHITECTURES
解决ExternalProject_Add传递CMAKE_OSX_ARCHITECTURES参数截断问题
直接用CMake的$<SEMICOLON>生成器表达式替代分号,就能避免参数被截断,两种简洁写法任选:
写法一:直接嵌入生成器表达式
ExternalProject_Add( your_external_target_name # 填写项目其他必要参数(如URL、SOURCE_DIR等) CMAKE_ARGS -DCMAKE_OSX_ARCHITECTURES:STRING="x86_64$<SEMICOLON>arm64" # 其他需要传递的CMake参数 )
写法二:先转义变量再传递
如果需要复用架构列表,可先处理变量再传入:
# 定义架构列表 set(TARGET_ARCHS "x86_64;arm64") # 替换分号为生成器表达式 string(REPLACE ";" "$<SEMICOLON>" TARGET_ARCHS_ESCAPED "${TARGET_ARCHS}") ExternalProject_Add( your_external_target_name # 项目其他参数 CMAKE_ARGS -DCMAKE_OSX_ARCHITECTURES:STRING="${TARGET_ARCHS_ESCAPED}" # 其他CMake参数 )
原理:CMake解析CMAKE_ARGS时会把分号视为参数分隔符,导致原架构列表被拆成两个独立参数,用$<SEMICOLON>会在最终执行外部CMake命令时还原为真实分号,保证参数完整传递。
内容的提问来源于stack exchange,提问作者vookimedlo
相关产品推荐
相关产品推荐

