我为我的程序编写了一个Makefile(下面的代码),其中包含hello.h,hello.cpp和main.cpp(这是hello.cpp的一个简单的测试平台)。
但是,在终端输入make后,它告诉我
make:`hello.o'是最新的。
有人可以提供任何提示吗?谢谢!
#MACRO
CAT_HOME = $(MGC_HOME)
TARGET = my_tb
#OBJECT1 = hello.o
OBJECTS = hello.o main.o
#OBJECT2 = main.o
DEPENDS = hello.cpp main.cpp hello.h
INCLUDES = -I"$(CAT_HOME)/shared/include"
DEFINES =
CXX = /usr/bin/g++
CXXFLAGS = -g -O3 $(DEFINES) $(INCLUDES)
$(TARGETS) : $(OBJECTS)
$(CXX) $(CXXFLAGS) -o $(TARGET) $(OBJECTS)
$(OBJECTS) : $(DEPENDS)
#phony target to remove all objects and executables
.PHONY: clean
clean:
rm -f *.o
答案 0 :(得分:2)
您定义了TARGET
变量,但稍后尝试使用$(TARGETS)
。这是一个与众不同的人。
此外,让每个 .o文件依赖于每个 .cpp文件是低效的。您也可以编写一个无条件地重新编译所有内容的线性脚本。由于您依赖于make的内置规则来从相应的.cpp创建.o,因此您无需显式声明该依赖项。因此,您可以从DEPENDS
中删除所有.cpp文件,而不会丢失任何相关的依赖项。