为Make添加另一个对象目录

问题描述 投票:0回答:1

我希望我的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。

谢谢

c makefile
1个回答
0
投票

以下makefile尚未经过测试

请注意使用':='来定义宏,因此该宏只需要被评估一次

注意:'。PHONY:'语句是要告诉make不会生成具有关联名称(干净,全部)的文件

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      := main

OBJECTS      := $(SOURCES_C:.c=.o)


.PHONY: all
all: $(PROGRAM)

$(DIST_DIR)/$(PROGRAM):  $(OBJECTS_DIR)/$(OBJECTS)
        $(CC) -o $@ $(OBJECTS_DIR)/$(OBJECTS) 

$(OBJECTS_DIR)/%.o:%.c
        $(CC) $(CFLAGS) -c %$<  -o $@

.PHONY: clean
clean:
        rm -f $(DIST_DIR)/$(PROGRAM) 
        rm -f $(OBJECTS_DIR)/*.o
© www.soinside.com 2019 - 2024. All rights reserved.