C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – Makefile似乎忽略了标志.为什么?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
似乎make忽略了我的cflag选项,因为编译器抱怨我需要将-std = c 11作为标志,但该选项包含在我的makefile中.
CC=g++
# Flags for the C compiler
CXX_FLAGS= \
    -Wall \
    -std=c++11 \
    -O2
# Linker Flags
LD_FLAGS= 

# sources to compile
sourcES=main.cpp
OBjeCTS=$(sourcES:.cpp=.o)
EXE=HolidayLights.out

all: $(sourcES) $(EXE)

# PriMary build target
$(EXE): $(OBjeCTS)
    $(CC) $(LD_FLAGS) $(OBjeCTS) -o $@

.o:
    $(CC) -c $(CXX_FLAGS) -o $@ $<

此makefile的构建命令的输出是:

g++     -c -o main.o main.cpp

我不明白为什么它没有在输出中列出我的标志.此外,我知道它忽略了-std = c 11标志,因为它抱怨非静态常量成员,并且它不应该启用该标志.

Edit0:符号更改

解决方法

您的.o:规则未被选中,请将其更改为.cpp.o:相反.

认情况下(来自GNU make doco):

您的规则在第一种情况下不起作用的原因是单后缀隐式规则应该是源类型而不是目标类型.因此规则将是.cpp :(再次,来自make doco):

但是,仔细阅读最后一句话.只有在想要将XYZZY.cpp转换为XYZZY时,.cpp:规则才有效.由于您的目标是XYZZY.o形式,因此不会使用它.

当然,另一种选择是根本不触及认规则,而只是修改它们使用的变量:

CXX      = g++
CPPFLAGS = -Wall -std=c++11 -O2
LD_FLAGS =

sourcES  = main.cpp
OBjeCTS  = $(sourcES:.cpp=.o)
EXE      = HolidayLights.out

all: $(sourcES) $(EXE)

$(EXE): $(OBjeCTS)
    $(CXX) $(LD_FLAGS) $(OBjeCTS) -o $@

而且,如果您想使用隐式规则,您应该使用首选表单,这是较新的模式规则.它们比后缀更强大.

大佬总结

以上是大佬教程为你收集整理的c – Makefile似乎忽略了标志.为什么?全部内容,希望文章能够帮你解决c – Makefile似乎忽略了标志.为什么?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。