我希望我的make文件输出(目标文件.o)到另一个子目录,例如OBJECTS_DIR =“ ./ build”
我也希望将我的.exe放在DIST_DIR =“ ./ dist”中
我的下面的make文件可以正常工作(编译和链接),但是路径相同。
# vars
CXX = g++
CXXFLAGS = -c89 -Wall -g
CC = gcc
CFLAGS = -Wall -g
SOURCES_C = main.c A.c B.c C.c D.c E.c
INCLUDES=
OBJECTS_DIR=./build
DIST_DIR=./dist
PROGRAM = main
OBJECTS = $(SOURCES_C:.c=.o)
debug := CFLAGS
all debug: $(PROGRAM)
$(PROGRAM): $(INCLUDES) $(OBJECTS)
$(LINK.c) -o $@ $(OBJECTS)
clean:
rm -f $(PROGRAM) $(OBJECTS)
我如何实现将.o文件输出到OBJECTS_DIR,然后从OBJECTS_DIR链接并将.exe输出到DIST_DIR。
根据用户建议进行了更新:
# vars
CXX = g++
CXXFLAGS = -Wall -g
CC = gcc
CFLAGS = -std=c89 -Wall -g
SOURCES_C = main.c A.c B.c C.c D.c E.c
OBJECTS_DIR := build
OBJECTS := $(SOURCES_C:%.c=$(OBJECTS_DIR)/%.o)
INCLUDES :=
DIST_DIR := dist
PROGRAM := $(DIST_DIR)/main
OBJECTS = $(SOURCES_C:.c=.o)
debug := CFLAGS
all debug: $(PROGRAM)
$(PROGRAM): $(INCLUDES) $(OBJECTS)
$(CC) -o $@ $(OBJECTS)
clean:
rm -f $(PROGRAM)
rm -f $(OBJECTS)
我按预期更新了Make及其工作。我一直依靠IDE来生成我的Makefile。
1)我有没有意识到的问题?
2).PHONY的意义是什么(仍然没有得到)。
谢谢
最佳答案
以下makefile尚未经过测试
请注意,使用':='来定义宏,因此该宏只需要评估一次
注意:“。PHONY:”语句是要告诉make
不会生成具有关联名称(干净,全部)的文件
根据Chris Dodd编辑的评论
CC := /usr/bin/gcc
RM := /bin/rm
CFLAGS := -Wall -g -Wextra -Wconversion -pedantic -std=gnu11
SOURCES_C := main.c A.c B.c C.c D.c E.c
OBJECTS_DIR := build
DIST_DIR := dist
PROGRAM := $(DIST_DIR)/main
OBJECTS := $(SOURCES_C:.c=$(OBJECTS_DIR)/%.o)
.PHONY: all
all: $(PROGRAM)
$(PROGRAM): $(OBJECTS)
$(CC) -o $@ $(OBJECTS)
$(OBJECT_DIR)/%.o:%.c
$(CC) $(CFLAGS) -c %$< -o $@
.PHONY: clean
clean:
rm -f $(PROGRAM)
rm -f $(OBJECTS)