我有一个makefile,我希望能够在更新它后执行。C makefile在makefile变更后没有编译
EXE = sensor log
LDIR = lib
CC = gcc
CFLAGS = -Wall -c $(DEFINES)
LFLAGS = -Wall -L./$(LDIR) -Wl,-rpath=./$(LDIR)
CDFLAGS = -Wall -c -fPIC
LDFLAGS = -Wall -shared
DEFINES = -D SET_ID=20
.SUFFIXES:
all: sensor log
debug: DEFINES += -DDEBUG
debug: all
$(EXE) : % : %.o $(LDIR)/liblist.so $(LDIR)/libtcpsocket.so
@echo "\n***** LINKING $< *****"
$(CC) $(LFLAGS) $< -llist -ltcpsocket -lpthread -lm -o [email protected]
liblist libmyqueue libtcpsocket libsensor_db : % : $(LDIR)/%.so
%.o : %.c %.check
@echo "\n***** COMPILING $< *****"
$(CC) $(CFLAGS) [email protected] $<
$(LDIR)/lib%.so : %.c %.check
$(eval name = $(basename $<))
@echo "\n***** COMPILING LIB $< *****"
$(CC) $(CDFLAGS) $<
mkdir -p $(LDIR)
@echo "\n***** LINKING LIB $< *****"
$(CC) $(LDFLAGS) $(name).o -o $(LDIR)/lib$(name).so
.PHONY : clean clean-all *.check
%.check : %.c
@echo "\n***** CPPCHECK $< *****"
cppcheck --enable=all $^
clean:
rm -f *.o $(EXE) *~
clean-all: clean
rm -rf $(LDIR)
的问题是,我希望能够有一个参数DEBUG
或没有(只是一个例子)进行编译。但是,由于这些文件在上次编译之间并没有改变,所以只是告诉我没有什么可做的。我该如何解决这个问题?
而且,在一个MySQL文件的命令行编译时,我通常使用$(mysql_config --cflags --libs)
编译它。但是,在makefile中这样做会导致它变成绿色。我该怎么做呢?
这还不清楚。当makefile被修改时,或者当您使用上一次没有使用的参数(例如'make DEBUG = true')执行它时,您是否希望Make重建对象? – Beta