Мне нужно скомпилировать библиотеки повышения с ExternalProject_Add
и нужна команда сборки
c ++ 11 флаги на платформе MacOS с Clang.
Команда должна выглядеть так:
./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, когда он обнаружил пространство внутри аргумента и обернул его кавычками, но это не то, что я хочу.
Я искал в Интернете, но не нашел никакой помощи. Есть ли совет по этому вопросу?
Это должно работать:
set(BOOST_CXX_FLAGS "cxxflags=-std=c++11 -stdlib=libc++")
Это должно произвести
./bin/b2 debug release "cxxflags=-std=c++11 -stdlib=libc++"
При обычных правилах разбора оболочки это эквивалентно тому, что работает для вас:
./bin/b2 debug release cxxflags="-std=c++11 -stdlib=libc++"
Это не дает точного ответа на ваш вопрос, так как я не вижу способа получить запрошенную вами командную строку в 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-build-out.log в вашем каталоге boost-stamp.