【问题标题】:makefile in c using linux [closed]使用linux在c中生成文件[关闭]
【发布时间】:2018-05-31 07:32:59
【问题描述】:

我制作了一个makefile,但它不能正常工作,它显示致命错误。

CXX = g++

CXXFLAGS = -wall -g

all:main

main: main.o Point.o Rectangle.o

    $(CXX) $(CXXFLAGS) -o main main.o Point.o Rectangle.o

main.o: main.cpp Point.h Rectangle.h

    $(CXX) $(CFLAGS) -c main.cpp

Point.o: Point.h

Rectangle.o: Rectangle.h Point.h

clean:
    rm *o main

【问题讨论】:

  • 请显示整个错误信息,以及您如何调用make
  • 你必须告诉如何创建你的.o文件。 Point.o: Point.h 什么都不做。你必须在它下面用标签$(CXX) -o Point.o -c Point.c $(CXXFLAGS)
  • 可能存在隐含规则。假设选项卡位于正确的位置,这样的 makefile 对我来说看起来不错。
  • @Hearner:你错了!足以说明 main 依赖于其他一些对象。 make 本身具有如何从不同的源类型创建 .o 文件的隐含规则
  • "$(CXX) $(CFLAGS) -c main.cpp" 行对我来说毫无意义。也缺少所有需要的缩进。它必须是标签!

标签: c++ makefile


【解决方案1】:

这可能就是你想要的:

CXX = g++
CXXFLAGS = -Wall -g
all:main

main: main.o Point.o Rectangle.o
    $(LINK.cpp) -o $@ $^

%.o: %.cpp
    $(CXX) $(CXXFLAGS) -c $^

clean:
    rm *.o main

以上假设您在同一文件夹中有源文件:main.cppPoint.cppRectangle.cpp。我还将-wall 更新为-Wall,并使用制表符进行缩进。我忘记了缩进的规则,但我只是用制表符使上面的所有内容都缩进以与我自己的有效 Makefile 保持一致。

【讨论】:

  • 为什么要重复一个已经存在的隐式规则?您还应该再次添加依赖项!而且干净的规则也不是最理想的。如果文件不存在,通常使用“-f”不会出错。
  • 这错过了Rectangle.o 依赖于Point.h
猜你喜欢
  • 2017-07-11
  • 2013-02-11
  • 1970-01-01
  • 2012-11-13
  • 1970-01-01
  • 2010-09-14
  • 2010-11-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多