Минимальный рабочий пример внизу.
Давайте предположим, что я хочу изменить сборку мусора GCC для конкретной цели CMake, назовите ее foo. Мой инстинкт был бы попытаться, например:
target_compile_options(foo <PRIVATE|INTERFACE|PUBLIC> --param ggc-min-heapsize=32768)
Это отлично работает. Но если я попробую:
target_compile_options(foo <PRIVATE|INTERFACE|PUBLIC> --param ggc-min-expand=1 --param ggc-min-heapsize=32768)
или
target_compile_options(foo <PRIVATE|INTERFACE|PUBLIC> --param ggc-min-expand=1)
target_compile_options(foo <PRIVATE|INTERFACE|PUBLIC> --param ggc-min-heapsize=32768)
Я получаю в ответ:
ggc-min-heapsize=32768: No such file or directory
Добавление кавычек вокруг аргументов или вокруг каждого аргумента не помогает. Я пробовал это на CMake 3.5.1 и 3.11, GCC 4.8 и GCC 7, без изменений.
Как ни странно, в старом стиле
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --param ggc-min-expand=1 --param ggc-min-heapsize=32768)
Кажется, работает просто отлично. Я что-то упускаю из-за современного использования target_compile_options?
Минимальный рабочий пример
CMakeLists.txt
cmake_minimum_required(VERSION 3.5.1 FATAL_ERROR)
project(test)
add_executable(test main.cpp)
target_compile_options(test PRIVATE --param ggc-min-expand=1)
// Uncommenting the below causes compilation to fail
// target_compile_options(test PRIVATE --param ggc-min-heapsize=32768)
main.cpp
int main() {}