我正在嘗試ppm2jpeg從我的來源生成一個檔案,以便在和中./src使用我的物件。我還想生成可以在../obj./obj_prof./tests
這是我的主檔案夾中的 Makefile:
CC = gcc
LD = gcc
CFLAGS = -Wall -Wextra -std=c99 -Iinclude -Ofast -pg
LDFLAGS = -lm -pg
SRC_FILES=$(wildcard src/*.c)
OBJ_FILES=$(patsubst src/%.c,obj/%.o,$(SRC_FILES))
OBJ_PROF_FILES = obj_prof/htables_prof.o
all: ppm2jpeg tests
ppm2jpeg: $(OBJ_FILES) $(OBJ_PROF_FILES)
$(LD) $(OBJ_FILES) $(OBJ_PROF_FILES) $(LDFLAGS) -o $@
tests: $(OBJ_FILES) $(OBJ_PROF_FILES)
make -C tests/
obj/%.o: src/%.c
$(CC) -c $(CFLAGS) $< -o $@
clean:
rm -rf ppm2jpeg do_test $(OBJ_FILES)
make -C tests/ clean
rm -f $(wildcard images/*.bla)
rm -f $(wildcard images/*.jpg)
這是我的Makefile ./tests:
CC = gcc
LD = gcc
CFLAGS = -Wall -Wextra -std=c99 -I../include -O0 -g
LDFLAGS = -lm -pg
OBJ_FILES = $(wildcard ../obj/*.o)
OBJ_PROF_FILES = ../obj_prof/htables_prof.o
SRC_TESTS = $(wildcard *-test.c)
OBJ_TESTS = $(patsubst %.c,%.o,$(SRC_TESTS))
TESTS = $(patsubst %-test.c,%-test,$(SRC_TESTS))
all: $(TESTS)
%-test: %-test.o
$(CC) -g $(OBJ_FILES) $(OBJ_PROF_FILES) $(OBJ_TEST) $^ -o $@ $(LDFLAGS)
%-test.o: %-test.c
$(CC) $(CFLAGS) -lm -c $^
clean:
rm -rf *.o *~ $(TESTS)
CC = gcc
LD = gcc
CFLAGS = -Wall -Wextra -std=c99 -I../include -O0 -g
LDFLAGS = -lm -pg
OBJ_FILES = $(wildcard ../obj/*.o)
OBJ_PROF_FILES = ../obj_prof/htables_prof.o
# Fichiers de test
SRC_TESTS = $(wildcard *-test.c)
OBJ_TESTS = $(patsubst %.c,%.o,$(SRC_TESTS))
TESTS = $(patsubst %-test.c,%-test,$(SRC_TESTS))
all: $(TESTS)
%-test: %-test.o
$(CC) -g $(OBJ_FILES) $(OBJ_PROF_FILES) $(OBJ_TEST) $^ -o $@ $(LDFLAGS)
%-test.o: %-test.c
$(CC) $(CFLAGS) -lm -c $^
clean:
rm -rf *.o *~ $(TESTS)
CC = gcc
LD = gcc
CFLAGS = -Wall -Wextra -std=c99 -I../include -O0 -g
LDFLAGS = -lm -pg
OBJ_FILES = $(wildcard ../obj/*.o)
OBJ_PROF_FILES = ../obj_prof/htables_prof.o
# Fichiers de test
SRC_TESTS = $(wildcard *-test.c)
OBJ_TESTS = $(patsubst %.c,%.o,$(SRC_TESTS))
TESTS = $(patsubst %-test.c,%-test,$(SRC_TESTS))
all: $(TESTS)
%-test: %-test.o
$(CC) -g $(OBJ_FILES) $(OBJ_PROF_FILES) $(OBJ_TEST) $^ -o $@ $(LDFLAGS)
%-test.o: %-test.c
$(CC) $(CFLAGS) -lm -c $^
clean:
rm -rf *.o *~ $(TESTS)
當我嘗試這樣做時
/tests/example-test.c:5: multiple definition of `main'; ../obj/ppm2jpeg.o:ppm2jpeg.c:(.text.startup 0x0): first defined here
collect2: error: ld returned 1 exit status
uj5u.com熱心網友回復:
該錯誤訊息意味著您正在嘗試將兩個目標檔案鏈接在一起,每個目標檔案都包含一個main()函式。
分析錯誤訊息,我猜想example-test.c和ppm2jpeg.cdefine main(),這意味著你不應該在同一個可執行檔案中鏈接example-test.o和。ppm2jpeg.o
在您的 Makefile 中,您可能應該確保OBJ_FILES只列出未定義的檔案main(),因此您應該確保它遺漏了ppm2jpeg.o.
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/477074.html
下一篇:awk中的多重算術運算
