Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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
Text 如何替换CFLAGS或CXXFLAGS中的选项_Text_Makefile_Gnu Make_Options - Fatal编程技术网

Text 如何替换CFLAGS或CXXFLAGS中的选项

Text 如何替换CFLAGS或CXXFLAGS中的选项,text,makefile,gnu-make,options,Text,Makefile,Gnu Make,Options,我正试图使用GNU Make来更改-O1的现有(可能缺失)优化级别。以下是我正在使用的: # Valgrind testing. Issue 'make valgrind'. ifneq ($(filter valgrind,$(MAKECMDGOALS)),) $(info: Valgrind build) CXXFLAGS := $(CXXFLAGS:-g?=-g3) CXXFLAGS := $(CXXFLAGS:-O?=-O1) ifeq ($(findstring -DVALGRIN

我正试图使用GNU Make来更改
-O1
的现有(可能缺失)优化级别。以下是我正在使用的:

# Valgrind testing. Issue 'make valgrind'.
ifneq ($(filter valgrind,$(MAKECMDGOALS)),)
$(info: Valgrind build)

CXXFLAGS := $(CXXFLAGS:-g?=-g3)
CXXFLAGS := $(CXXFLAGS:-O?=-O1)

ifeq ($(findstring -DVALGRIND_BUILD,$(CXXFLAGS)),)
$(info: adding -DVALGRIND_BUILD)
CXXFLAGS += -DVALGRIND_BUILD
endif # -DVALGRIND_BUILD

ifeq ($(findstring -O,$(CXXFLAGS)),)
$(info: adding -O1)
CXXFLAGS += -O1
endif # Optimizations

endif # Valgrind
我相信我正在从手册中调用此规则或功能:

$(var:pattern=replacement)
事情没有按预期进行。已添加定义,但未发生替换:

$ CXXFLAGS="-DNDEBUG -g2 -O3" make valgrind
g++ -DNDEBUG -g2 -O3 -DVALGRIND_BUILD -c cryptlib.cpp
g++ -DNDEBUG -g2 -O3 -DVALGRIND_BUILD -c cpu.cpp
g++ -DNDEBUG -g2 -O3 -DVALGRIND_BUILD -c integer.cpp
...
我还尝试了
$(过滤掉…
(认为我可以在之后添加所需的优化),但这也不起作用:

CXXFLAGS := $(filter-out -g?,$(CXXFLAGS))
CXXFLAGS := $(filter-out -O?,$(CXXFLAGS))
这里有一个类似的问题,其答案同时建议
subst
过滤掉
:。但我似乎无法让这些方法按预期工作


如何执行替换?

为什么不这样使用“%”而不是“?”

CXXFLAGS := $(CXXFLAGS:-g%=-g3)

我现在无法访问任何linux设备。
所以,我无法证实这一点p

“为什么不使用
%
”-根据手册,
匹配GNUmake中的单个字符。请参阅手册中的。GNU make中的模式不使用“?”作为通配符。通配符部分仅与文件名匹配相关;它明确地说它是在目标和先决条件上执行的:这两者都不是。您应该阅读描述替代参考的文档(即此文档);它表示初始字符串必须包含单个
%
字符。
CXXFLAGS := $(patsubst -g%,-g3,$(CXXFLAGS))