gcc 在Makefile中使用MySQL

20jt8wwn  于 12个月前  发布在  Mysql
关注(0)|答案(1)|浏览(117)

我有一个项目有很多缺点:


的数据
我正在尝试编写一个Makefile,它可以将所有内容编译成一个. exe。
下面是我的Makefile:

#Makefile

CFLAGS = -Wall -Wextra -O3

SRC = $(wildcard */*.c)

OBJ = $(SRC:.c=.o)

all : Executable

Executable : $(OBJ)
    gcc -o Executable  $(OBJ)

#transforme tous les .c en .o
%.o : %.c
    gcc -o $(OBJ) -c $(SRC)

clean:
    rm Executable
    find . -type f -name "*.o" -exec rm {} \;



#END

字符串
然而,它不是很好地工作。我有错误的清洁:

find . -type f -name "*.o" -exec rm {} \;
cc  -o clean  
cc: fatal error: no input files
compilation terminated.
make: *** [Makefile:21: clean] Error 1


还有编译:

gcc -o construct_grid/construct_grid.o detect_boxes/detect_boxes.o detect_character/detect_character.o errors/errors.o fileManager/fileManager.o preprocessing/preprocessing.o solver/solver.o -c construct_grid/construct_grid.c detect_boxes/detect_boxes.c detect_character/detect_character.c errors/errors.c fileManager/fileManager.c preprocessing/preprocessing.c solver/solver.c
gcc: fatal error: cannot specify ‘-o’ with ‘-c’, ‘-S’ or ‘-E’ with multiple files
compilation terminated.
make: *** [Makefile:17: construct_grid/construct_grid.o] Error 1


我的Makefile有什么问题,我如何修复它?

qnzebej0

qnzebej01#

我对清洁有错误:

find . -type f -name "*.o" -exec rm {} \;
cc  -o clean  
cc: fatal error: no input files
compilation terminated.
make: *** [Makefile:21: clean] Error 1

字符串
在makefile中没有任何东西可以解释为什么cc -o clean会在make clean期间被执行。或者曾经。如果你已经展示了完整的makefile,那么我只能假设它没有被直接使用,而是通过将include d放入其他负责引入额外命令的makefile中。
另一方面,这个...

gcc -o construct_grid/construct_grid.o detect_boxes/detect_boxes.o detect_character/detect_character.o errors/errors.o fileManager/fileManager.o preprocessing/preprocessing.o solver/solver.o -c construct_grid/construct_grid.c detect_boxes/detect_boxes.c detect_character/detect_character.c errors/errors.c fileManager/fileManager.c preprocessing/preprocessing.c solver/solver.c
gcc: fatal error: cannot specify ‘-o’ with ‘-c’, ‘-S’ or ‘-E’ with multiple files
compilation terminated.
make: *** [Makefile:17: construct_grid/construct_grid.o] Error 1


.是这个错误规则的后果:

%.o : %.c
    gcc -o $(OBJ) -c $(SRC)


像这样的模式规则应该有一个配方,它可以从相应的先决条件中构建与目标模式匹配的 one 文件。您的$(OBJ)扩展为 all 所需对象文件的名称,$(SRC)扩展为 all 相应源文件的名称。编译器不接受结果命令是一个附带问题。此外,该规则不使用CFLAGS变量中设置的编译选项。
你似乎想要更像这样的东西:

%o: %c
        gcc $(CFLAGS) -c $< -o $@


$@是一个自动变量,它扩展到正在构建的目标的名称(在本例中是.o文件之一),$<是另一个自动变量,它扩展到列表中第一个先决条件的名称。
或者你甚至可以完全忽略这个规则,因为make有一个内置的规则,它做了一个实质上等同的事情(但不完全相同,因为内置的规则识别了一些你没有使用的额外变量)。

相关问题