【问题标题】:How to set command argument in externalproject_add如何在 externalproject_add 中设置命令参数
【发布时间】:2016-12-12 10:44:05
【问题描述】:

我想创建一个 cmake 脚本来在我的项目中自动构建 zlib。

我加了

externalproject_add(zlib
  PREFIX .
  # download step
  GIT_REPOSITORY git@github.com:madler/zlib.git
  GIT_TAG v1.2.8
  # configure step
  SOURCE_DIR zlib
  CONFIGURE_COMMAND ${CMAKE_SOURCE_DIR}/build/zlib/zlib/configure --archs="-arch ${ARCH}" --static
  # build step
  BUILD_COMMAND make
  BUILD_IN_SOURCE 1
  # install step
  INSTALL_DIR zlib-${ARCH}
  INSTALL_COMMAND make install
  # logging
  LOG_CONFIGURE 1
  LOG_BUILD 1
  LOG_INSTALL 1
  )

但它会生成如下配置命令:

'/Users/david/Documents/cmake_projects/build/zlib/zlib/configure' '--archs=' '-arch' 'x86_64"' '--static"'

我认为没有正确引用。

我尝试了很多技巧,但我无法让命令工作。有什么想法吗?

【问题讨论】:

  • 尝试了很多技巧” - 这些是哪些?

标签: cmake external-project


【解决方案1】:

双引号防止字符串被拆分。我也至少将 ${ARCH_PARAMS} 参数分隔成单独的变量,所以,你会有这样的东西:

set(ARCH_PARAMS "--archs='-arch ${ARCH}'")
...
...
CONFIGURE_COMMAND ${CMAKE_SOURCE_DIR}/build/zlib/zlib/configure ${ARCH_PARAMS} --static

所以,它会这样传递:

'/tmp/so_test/build/zlib/zlib/configure' '--archs='-arch x64_86'' '--static'

在旁注中,zlib 配置接缝有点可疑,因为它一直在抱怨编译器错误报告:

$ ./configure --static --archs="-arch x86_64"

正在检查 gcc...

编译器错误报告对于 ./configure 来说太苛刻了(可能删除 -Werror)。

** ./配置中止。

相关问题:

cmake: How to include literal double-quote in custom command?

【讨论】:

  • 其实引用整个论点就足够了:"--archs=-arch xxx"。 cmake 将进行报价。而且效果很好。
  • @davidshen84 mhm。您能否说明您正在使用的 CMake 版本?因为在我的机器上没有。我猜 CMake 的邮件列表中提到了一些更改,涉及自动引用和与旧版本的兼容性。
  • 我正在使用3.6.1。但我不认为它是新的。您可以加入 irc 频道。我在那里学会了这个技巧。
猜你喜欢
  • 1970-01-01
  • 2012-02-28
  • 1970-01-01
  • 2020-06-24
  • 1970-01-01
  • 2023-03-07
  • 2015-06-14
  • 2015-07-08
  • 1970-01-01
相关资源
最近更新 更多