首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CMake:使用target_compile_options设置ggc-min- -heapsize和扩展

CMake:使用target_compile_options设置ggc-min- -heapsize和扩展
EN

Stack Overflow用户
提问于 2018-09-07 05:31:35
回答 1查看 1.8K关注 0票数 1

最小的工作示例在底部。

假设我想为一个特定的CMake目标修改GCC垃圾收集,称之为foo。我的直觉是尝试,例如:

代码语言:javascript
运行
复制
target_compile_options(foo <PRIVATE|INTERFACE|PUBLIC> --param ggc-min-heapsize=32768) 

这可以很好地工作。但如果我试一下:

代码语言:javascript
运行
复制
target_compile_options(foo <PRIVATE|INTERFACE|PUBLIC> --param ggc-min-expand=1 --param ggc-min-heapsize=32768)

代码语言:javascript
运行
复制
target_compile_options(foo <PRIVATE|INTERFACE|PUBLIC> --param ggc-min-expand=1)
target_compile_options(foo <PRIVATE|INTERFACE|PUBLIC> --param ggc-min-heapsize=32768)

我得到的回答是:

代码语言:javascript
运行
复制
ggc-min-heapsize=32768: No such file or directory

在参数两边加引号或在每个参数两边加引号是没有用的。我已经在CMake 3.5.1和3.11,GCC 4.8和GCC 7上试用过了,没有变化。

奇怪的是,老式的

代码语言:javascript
运行
复制
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --param ggc-min-expand=1 --param ggc-min-heapsize=32768)

似乎工作得很好。我是不是错过了target_compile_options的现代用法?

最小工作示例

CMakeLists.txt

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
int main() {}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-07 06:19:09

问题在于,CMake会对传递给target_compile_options的标志进行重复删除,因此最终会将"--param CMake min-expand=1 gcc-min-heapsize=32768“传递给gcc。这显然是错误的。还有an issue,人们对此颇有微词。

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

代码语言:javascript
运行
复制
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")
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52212419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档