gpt4 book ai didi

c++ - 对标志在 makefile 中的工作方式感到困惑

转载 作者:行者123 更新时间:2023-11-30 01:46:52 25 4
gpt4 key购买 nike

我有 2 个文件:main.cpp,其中包含 foo.h。我需要一个使用 -std=c++11 标志编译它们的 makefile,但我不知道为什么第一个 makefile 设置了标志,而第二个却没有。

作品:

CXX=g++
CXXFLAGS=-g -std=c++11 -Wall -pedantic
BIN=prog

SRC=$(wildcard *.cpp)
OBJ=$(SRC:%.cpp=%.o)

all: $(OBJ)
$(CXX) -o $(BIN) $^

%.o: %.c
$(CXX) $@ -c $<

clean:
rm -f *.o
rm $(BIN)

不起作用:(实际上未标记 c++11,因此不能使用 c++11)

CXX=g++
CXXFLAGS=-g -std=c++11

all:
g++ main.cpp -o main

最佳答案

由于您的第一个 makefile 没有从 .cpp 生成 .o 的规则,因此使用了隐式规则。该规则类似于:

%.o: %.cpp
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $< $@

您可以在 GNU Make here 中找到所有隐式规则.

您的第二个 makefile 不使用此规则,因为 all 规则直接编译 main,而不是依赖于 main.o。由于您使用的是显式规则,因此还需要显式使用变量。

all:
$(CXX) $(CXXFLAGS) main.cpp -o main

关于c++ - 对标志在 makefile 中的工作方式感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32514093/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com