업데이트 후 실행할 수있는 메이크 파일이 있습니다. 메이크 파일에서 메이크 파일이 변경된 후에 컴파일되지 않음
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
여부 (단지 예)로 컴파일 할 수 있도록하려는 것입니다. 그러나, 마지막 컴파일 사이에 파일 자체가 변경되지 않았기 때문에 make는 아무것도 할 필요가 없다는 것을 알려줍니다. 이 문제를 어떻게 해결할 수 있습니까?
또한 mysql 파일의 명령 줄에서 컴파일 할 때 나는 보통 $(mysql_config --cflags --libs)
을 사용하여 컴파일합니다. 그러나 메이크 파일에서이 작업을 수행하면 녹색으로 바뀝니다. 어떻게해야합니까?
이것은 분명하지 않습니다. makefile이 수정되었을 때 또는 이전에 사용하지 않은 매개 변수 (예 :'make DEBUG = true')를 사용하여 make를 실행할 때 Make가 다시 만들길 원하십니까? – Beta