【问题标题】:CFLAGS not recognised in makefilemakefile 中无法识别 CFLAGS
【发布时间】:2016-09-07 23:45:52
【问题描述】:

我正在复杂化一个使用 lambda 函数的小型学校作业,因此它需要 gcc 调用中的“-std=c++11”。但是,make 文件的输出似乎表明它没有被添加。我没有链接问题,因此无需在此处复制所有源代码。

这是我的生成文件:

CC=g++
CFLAGS= -std=c++11 -I. -Wall
DEPS = wordarray.h
OBJ = ayalajL03b.o wordarray.o

%.o: %.c $(DEPS)
        $(CC) -c -o $@ $< $(CFLAGS)

L03b.out: $(OBJ)
        $(CC) -o $@ $^ $(CFLAGS)

.PHONY: clean

clean:
        rm -f -v *.o
        rm -f -v *.out

这是输出:

[user@server Lab03]$ make
g++    -c -o wordarray.o wordarray.cpp
wordarray.cpp:28:77: warning: lambda expressions only available with -std=c++11 or =gnu++11
    counter([](char a)->bool{return !isvowel(a) && !isdigit(a) && isalpha(a);}, Worount].word);

请帮助我理解我做错了什么。

【问题讨论】:

  • 使用CXXCXXFLAGS。删除%.o: %.c 的规则,它无论如何都不适用于.cpp 文件,然后重试。 Make 具有预定义(“隐式”,在 Make 术语中)规则,用于从使用 CXXCXXFLAGS 变量的 .cpp 文件构建 .o 目标。

标签: c++ c++11 makefile


【解决方案1】:

你的规则是

%.o: %.c $(DEPS)

但是你正在编译一个.cpp 文件。

将使用 .cpp 源文件的隐式 make 规则。

要么将您的规则更改为

%.o: %.cpp $(DEPS)

或者设置隐式规则中使用的CXXFLAGS变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-02
    • 1970-01-01
    相关资源
    最近更新 更多