c++ - 使用包含空格的命令时 ExternalProject_Add 的奇怪行为

标签 c++ macos cmake clang external-project

我需要使用 ExternalProject_Add 编译 boost 库,构建命令需要 带有 Clang 的 MacOS 平台上的 c++11 标志。

命令应该是这样的:

./bin/b2 debug release cxxflags="-std=c++11 -stdlib=libc++" linkflags=-stdlib=libc++

但是我对引号和空格有疑问。

set(BOOST_CXX_FLAGS cxxflags="-std=c++11 -stdlib=libc++")
set(BOOST_TOOL_SET toolset=clang ${BOOST_CXX_FLAGS}
linkflags=-stdlib=libc++)
ExternalProject_Add(boost
  ....
  BUILD_COMMAND ./bin/b2 debug release
    ${BOOST_TOOL_SET} 
  ....
)

${BOOST_TOOL_SET} 值是一个列表,cxxflags="-std=c++11 -stdlib=libc++"是里面的一项,生成的命令行就变得奇怪了:

./bin/b2 debug release "cxxflags=\"-std=c++11 -stdlib=libc++\""
linkflags=-stdlib=libc++

当 CMake 检测到参数中的空格并将其用引号括起来时,该标志似乎由 CMake 翻译,但这不是我想要的。

我在 Internet 上搜索过,但没有找到任何帮助。关于这个问题有什么提示吗?

最佳答案

这应该有效:

set(BOOST_CXX_FLAGS "cxxflags=-std=c++11 -stdlib=libc++")

这应该产生

./bin/b2 debug release "cxxflags=-std=c++11 -stdlib=libc++"

在正常的 shell 解析规则下,这等同于对你有用的:

./bin/b2 debug release cxxflags="-std=c++11 -stdlib=libc++"

关于c++ - 使用包含空格的命令时 ExternalProject_Add 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17144356/

相关文章:

macos - 如何在 Mac OSX 中仅使用具有特定 HID 的键盘上的按键事件?

c++ - cmake 没有目标文件

c++ - 将 bash 命令添加到 CMake 测试中

C++:基类调用自己的虚函数——一种反模式?

c++ - 如何使用按位运算符提取整数中的数字

java - 是否可以在应用程序中捆绑 kext?

swift - Cocoa 绑定(bind)仅以一种方式工作(NSMutableDictionary)

visual-studio-2010 - 将文件添加到 Visual Studio 2010 中的 cmake 项目

c++ - iostream库和gcc问题

c++ - 在 wxWidgets (Windows) 的 ToolBar 中添加 ComboBox