我需要使用ExternalProject_Add
编译boost库,并且需要build命令
带有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在检测到参数内的空间并用引号括起来时翻译的,但这不是我想要的。
我在互联网上搜索,但没有找到任何帮助。关于这个问题是否有任何提示?
答案 0 :(得分:2)
这应该有效:
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++"
答案 1 :(得分:1)
这并没有完全回答你的问题,因为我无法找到一种方法来获取所请求的命令行到b2 exe,cxxflags="-std=c++11 -stdlib=libc++"
部分格式正确。
但是,我相信你可以通过两次调用cxxflags=
来达到预期的效果。每个参数都附加到最终由b2调用的编译器标志。
所以你应该能够做到:
set(BOOST_CXX_FLAGS cxxflags=-std=c++11 cxxflags=-stdlib=libc++)
并且b2调用的最终命令将类似于
"clang++" ... -std=c++11 -stdlib=libc++ ...
要验证这一点,您可以在命令中添加-d+2
:
BUILD_COMMAND ./bin/b2 debug release ${BOOST_TOOL_SET} -d+2
这会导致将完整命令写入boost-stamp目录中的boost-build-out.log文件。