Makefile with macro,不生成任何可执行文件

时间:2011-08-07 22:39:51

标签: c++ makefile

我为我的程序编写了一个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

1 个答案:

答案 0 :(得分:2)

您定义了TARGET变量,但稍后尝试使用$(TARGETS)。这是一个与众不同的人。

此外,让每个 .o文件依赖于每个 .cpp文件是低效的。您也可以编写一个无条件地重新编译所有内容的线性脚本。由于您依赖于make的内置规则来从相应的.cpp创建.o,因此您无需显式声明该依赖项。因此,您可以从DEPENDS中删除所有.cpp文件,而不会丢失任何相关的依赖项。