我找不到一种方法来创建我的CMake ExternalProjects的胖库。问题的优点是如何传递-DCMAKE_OSX_ARCHITECTURES:STRING=“x86_64;arm 64”添加到ExternalProject_Add定义中的CMAKE_ARGS。
人们会期望下面的定义可以完美地工作。然而,似乎CMAKE_ARGS的内容正在以某种方式被解析,这导致了结果CMakeCache.txt中的错误值。
- CMake定义 *
ExternalProject_Add(
ext_libexiv2
GIT_REPOSITORY https://github.com/Exiv2/exiv2.git
GIT_TAG v0.27.6
GIT_SHALLOW true
CMAKE_ARGS -DCMAKE_OSX_ARCHITECTURES:STRING="x86_64;arm64" -DBUILD_SHARED_LIBS=OFF -DEXIV2_BUILD_SAMPLES=OFF -DEXIV2_BUILD_EXIV2_COMMAND=OFF
UPDATE_COMMAND ""
)
- CMakeCache.txt*
//No help, variable specified on the command line.
CMAKE_OSX_ARCHITECTURES:STRING="x86_64
我试着转义双引号,使用单引号,转义分号,但都没有成功。
当然,我可以做的脂肪库在多个步骤,但我更喜欢清洁的解决方案。我会感谢任何方向你给予我。
2条答案
按热度按时间h6my8fg21#
解决方案是在ExternalProject_Add定义中使用LIST_SEPARATOR选项。
这样,得到的缓存值就是正确的缓存值。
结果库现在真的很胖。
mnowg1ta2#
如果你切换到使用
CMAKE_CACHE_ARGS
而不是CMAKE_ARGS
,这个问题就会消失。就像CMAKE_CACHE_ARGS "-DCMAKE_OSX_ARCHITECTURES:STRING=x86_64;arm64"
一样。从文档中:这是指定缓存变量的另一种方法,其中命令行长度问题可能会成为问题。参数的格式应为
-Dvar:STRING=value
,然后使用FORCE
选项将其转换为CMakeset()
命令。这些set()
命令写入预加载脚本,然后使用cmake -C
命令行选项应用该脚本。