【问题标题】:Makefile will not expand dependenciesMakefile 不会扩展依赖
【发布时间】:2011-12-18 20:33:41
【问题描述】:

以下面的makefile为例:

CC=g++
CFLAGS=-c -Wall
LDFLAGS=-lfoobar
SOURCES=main.cpp foo.cpp bar.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=hello

全部:$(对象) $(CC) $(LDFLAGS) $(OBJECTS) -o $@

$(对象): $(CC) $(CFLAGS) $

$

我已尝试将其更改为以下内容:

CC=g++
CFLAGS=-c -Wall
LDFLAGS=
SOURCES=main.cpp foo.cpp bar.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=hello

all: $(OBJECTS) # or main.o foo.o bar.cpp $(CC) $(LDFLAGS) $(OBJECTS) -o $@

.cpp.o: $(CC) $(CFLAGS) $

这告诉我 main.o 没有规则

我在这里遗漏了什么吗?我看到很多使用这些语法和/或变量和依赖项的 make 文件。

【问题讨论】:

  • $< 代表$(OBJECTS) 的先决条件列表,您没有给出任何条件。只需使用 trojanfoe 建议的内置规则即可。
  • 第二次尝试的语法似乎是正确的。你检查过 make -rd 的输出并确定 main.cpp 存在吗?

标签: c++ linux makefile


【解决方案1】:

试试这个:

CXX=g++
CXXFLAGS=-c -Wall
LDFLAGS=
SOURCES=main.cpp foo.cpp bar.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=hello

all: $(EXECUTABLE)

$(EXECUTABLE): $(OBJECTS)  # or main.o foo.o bar.cpp
    $(CXX) -o $@ $(LDFLAGS) $(OBJECTS) $(LIBS)

反正构建每个目标文件的规则都是内置的,所以不需要定义。

【讨论】:

  • 我直接将您的复制并粘贴到一个新的 makefile 中,但我仍然收到“没有规则来制作目标 Main.o', needed by hello'。停止。”我不明白这有什么问题......
  • Main.o?不是main.o?看起来你的文件命名有问题!
  • 那是……奇怪。我发誓我直接复制并粘贴了它。我不知道大小写是如何改变的......嗯..我现在似乎走在了正确的轨道上。
猜你喜欢
  • 1970-01-01
  • 2017-07-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-05
  • 1970-01-01
  • 2016-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多