2015-04-12 66 views
0

我有以下make文件。問題是,即使兩個.cpp文件中沒有更改,仍然會在提示符下運行所有​​命令。其他一切工作正常。makefile,工作正常,但即使沒有更改也能運行命令

all: hello1 

hello1: make func 

     gcc hellomake.o hellofunc.o -o hello -I. 

make: hellomake.c 

     gcc -c hellomake.c 

func: hellofunc.c 

     gcc -c hellofunc.c 

clean: 

     rm -rf *o hello 

run: 

     ./hello 
+2

您應該將* make *,* func *在你的Makefile中有* hellomake.o *,* hellofunc.o *。 –

+0

爲了擴展@ NickZavaritsky的評論(他應該將其作爲答案),make和func是目標,但這些規則實際上並沒有構建名爲「make」和「func」的文件,所以Make總是認爲這些文件丟失,必須重建。 – Beta

+0

感謝您的意見 – CodeNIGMATIC

回答

0

下面是一個簡單的Makefile,你可以modifiy(尤其是CFLAGS部分),並不會重新鏈接

NAME = xxx 
SRCS = xxx.c 
OBJS = $(SRCS:.c=.o) 

CC  = gcc 
RM  = rm -rf 

CFLAGS += -W -Wall -Wextra 
CFLAGS += -O2 
CFLAGS += -ansi -pedantic 
CFLAGS += -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE 

all: $(NAME) 

$(NAME):  $(OBJS) 
    $(CC) $(OBJS) -o $(NAME) 

clean: 
    $(RM) $(OBJS) 

fclean: clean 
    $(RM) $(NAME) 

re:  fclean all 

.PHONY: all clean fclean re 

.PHONY允許區分最終文件名和規則名稱

-1

您需要將.c替換爲目標中的.o,如下所述

make: hellomake.o 

     gcc -c hellomake.c 

func: hellofunc.o 

     gcc -c hellofunc.c 
相關問題