我需要使用 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/