我有一个项目,它需要两个独立的可执行文件,每个都有一个'main‘函数。它们与函数定义共享一个头文件和另一个文件。我正在使用的makefile给出了"multiple definition of ` `main'“错误。我想将这两个可执行文件编译到"./bld“文件夹中。有没有人能给我指点一下我哪里做错了?谢谢。
CC := gcc CFLAGS := -g -Wall -Werror RM := rm MKDIR := mkdir -p OUT_DIR := bld OBJ_DIR := $(OUT_DIR)/obj SOURCES := $(wildcard *.c) OBJECTS := $(addprefix $(OBJ_DIR)/, $(SOURCES:.c=.o)) TARGET := $(addprefix $(OUT_DIR)/, $(SOURCES:.c=)) .PHONY: all clean all: $(TARGET) clean: $(RM) -rf $(OUT_DIR) $(TARGET): $(OBJECTS) $(CC) $(CFLAGS) $^ -o $@ $(OBJ_DIR)/%.o: %.c @$(MKDIR) $(dir $@) $(CC) $(CFLAGS) -c $< -o $@
【玩转 GPU】有奖征文
精美礼品等你拿!
查看您的Makefile,您似乎只调用了一次gcc来构建您的两个可执行文件。要构建两个可执行文件,需要调用两次gcc,一次调用第一个可执行文件的源代码,另一次调用第二个可执行文件的源代码
对于我的C/C++项目,我对Makefile使用了不同类型的模板,但以下是该模板在您的情况下的样子
SRC1 = main1.c \ other.c OBJ1 = $(SRC1:.c=.o) NAME1 = executableName1 SRC2 = main2.c \ other.c OBJ2 = $(SRC2:.c=.o) NAME2 = executableName2 all: $(NAME1) $(NAME2) $(NAME1): $(OBJ1) gcc -o $(NAME1) $(OBJ1) $(NAME2): $(OBJ2) gcc -o $(NAME2) $(OBJ2) clean: rm -Rf $(OBJ1) rm -Rf $(OBJ2) fclean: clean