Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ CMake:使用target\u compile\u选项设置ggc min expand和-heapsize_C++_Gcc_Memory_Cmake_Resources - Fatal编程技术网

C++ CMake:使用target\u compile\u选项设置ggc min expand和-heapsize

C++ CMake:使用target\u compile\u选项设置ggc min expand和-heapsize,c++,gcc,memory,cmake,resources,C++,Gcc,Memory,Cmake,Resources,底部的最小工作示例 让我们假设我想要修改特定CMake目标的GCC垃圾收集,称之为foo。我的本能是尝试,例如: target_compile_options(foo <PRIVATE|INTERFACE|PUBLIC> --param ggc-min-heapsize=32768) 在参数或每个参数周围添加引号没有帮助。我已经在CMake 3.5.1和3.11、GCC 4.8和GCC 7上尝试过了,没有任何变化 奇怪的是,老式的 SET(CMAKE_CXX_FLAGS "${C

底部的最小工作示例

让我们假设我想要修改特定CMake目标的GCC垃圾收集,称之为foo。我的本能是尝试,例如:

target_compile_options(foo <PRIVATE|INTERFACE|PUBLIC> --param ggc-min-heapsize=32768) 
在参数或每个参数周围添加引号没有帮助。我已经在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)
看起来很好用。我是否遗漏了目标编译选项的现代用法

最小工作示例 CMakeLists.txt main.cpp
问题是CMake会消除传递给
目标编译选项的重复标志,因此它最终会将“-param gcc min expand=1 gcc min heapsize=32768”传递给gcc。这显然是错误的。有很多人在抱怨

为了解决这个问题,我们开发了一些新功能。您可以将选项用引号括起来,并在
SHELL:
前面加上前缀。出于重复数据消除的目的,参数将被视为单个单元,但将作为多个参数传递给gcc(就像被shell拆分一样)。此更改是在CMake 3.12中发布的,因此发行版的软件包管理器版本可能还没有

cmake_minimum_required(VERSION 3.12.1 FATAL_ERROR)
project(example)

add_executable(example main.cpp) 
target_compile_options(example PRIVATE "SHELL:--param ggc-min-expand=1")
target_compile_options(example PRIVATE "SHELL:--param ggc-min-heapsize=32768")

谢谢你清晰而连贯的解释。这可能意味着是时候咬紧牙关,从源代码构建最新的CMake了。
ggc-min-heapsize=32768: No such file or directory
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --param ggc-min-expand=1 --param ggc-min-heapsize=32768)
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)
int main() {}
cmake_minimum_required(VERSION 3.12.1 FATAL_ERROR)
project(example)

add_executable(example main.cpp) 
target_compile_options(example PRIVATE "SHELL:--param ggc-min-expand=1")
target_compile_options(example PRIVATE "SHELL:--param ggc-min-heapsize=32768")