У меня есть следующий код в CMakeLists.txt для установки некоторых флагов компилятора и компоновщика для моего проекта emscripten:
Старый, рабочий код
set_target_properties(prolog_bfs PROPERTIES COMPILE_FLAGS "-s USE_BOOST_HEADERS=1 -s DISABLE_EXCEPTION_CATCHING=0")
set_target_properties(prolog_bfs PROPERTIES LINK_FLAGS "--bind --emrun -s USE_BOOST_HEADERS=1 -s DISABLE_EXCEPTION_CATCHING=0")
Это прекрасно работает, и мой Компилятор вызывается с параметрами, как и должно (мне все еще интересно, откуда пробелы после em ++, но это не проблема):
em++ -s USE_BOOST_HEADERS=1 -s DISABLE_EXCEPTION_CATCHING=0 -std=gnu++17 -o xy.o -c xy.cpp
Однако, COMPILE_FLAGS
и LINK_FLAGS
устарела , поэтому я хочу перейти на новый / рекомендуемый подход использования target_compile_options()
и target_link_options()
вместо.
Таким образом, Я изменил свой CMakeLists.txt следующим образом:
Новый подход
target_compile_options(prolog_bfs PUBLIC -s USE_BOOST_HEADERS=1;-s DISABLE_EXCEPTION_CATCHING=0)
target_link_options(prolog_bfs PUBLIC --bind;--emrun;-s USE_BOOST_HEADERS=1;-s DISABLE_EXCEPTION_CATCHING=0)
Я понимаю, что функция параметров target _ * _ требует разделения флагов точкой с запятой, что я и сделал. Кроме того, я не вижу других существенных отличий.
Проблема
При построении моего проекта с этими изменениями компилятор будет вызываться так:
em++ -s USE_BOOST_HEADERS=1 DISABLE_EXCEPTION_CATCHING=0 -std=gnu++17 -o xy.o -c xy.cpp
Обратите внимание, что -s
перед вторым флагом отсутствует , Я не понимаю, почему это исчезает. Интересно, что первый остается там.
Вопрос
Как мне преобразовать мой исходный код CMakeLists.txt в современный подход без потери -s
?