gpt4 book ai didi

mysql - 更改 makefile 后 C makefile 无法编译

转载 作者:太空宇宙 更新时间:2023-11-04 00:05:54 25 4
gpt4 key购买 nike

我有一个生成文件,我希望在更新后能够执行它。

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 $@

liblist libmyqueue libtcpsocket libsensor_db : % : $(LDIR)/%.so

%.o : %.c %.check
@echo "\n***** COMPILING $< *****"
$(CC) $(CFLAGS) -o$@ $<

$(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 中执行此操作会导致它变为绿色。我该怎么做?

最佳答案

对于DEBUG参数,最简单的方法是在命令行中添加一个参数。您可以通过在第一个目标之前添加下一行来做到这一点:

ifeq ($(DEBUG),1)
DEFINES += -DDEBUG
endif

甚至这样,将 DEBUG 参数限制在命令行中:

ifeq ("$(origin DEBUG)", "command line")
ifeq ($(DEBUG),1)
DEFINES += -DDEBUG
endif
endif

然后你只需要这样做就可以在 Debug模式下编译:

$ make DEBUG=1

对于 mysql,只需使用 shell 命令即可:

CFLAGS := -Wall -c $(DEFINES) $(shell mysql_config --cflags --libs)

关于mysql - 更改 makefile 后 C makefile 无法编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24385012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com