MSYS2配置+通用makefile编写
MSYS2的下载
https://mirrors.tuna.tsinghua.edu.cn/help/msys2/
makefile和gcc的安装
在 MSYS2 终端中输入下列命令即可
pacman -S gcc
pacman -S make
如果windows已经安装过了,可以在 MSYS2中添加配置:
notice:就是这个环境变量的设置,网上找了好多资料,都说是到windows下去设置环境变量,完全没用,真坑爹啊。
转:> https://blog.csdn.net/qq_16981075/article/details/123835207
通用makafile
CROSS_COMPILE = mingw32-
AS = $(CROSS_COMPILE)as
LD = $(CROSS_COMPILE)ld
CC = $(CROSS_COMPILE)gcc
CPP = $(CC) -E
AR = $(CROSS_COMPILE)ar
NM = $(CROSS_COMPILE)nm
STRIP = $(CROSS_COMPILE)strip
OBJCOPY = $(CROSS_COMPILE)objcopy
OBJDUMP = $(CROSS_COMPILE)objdump
obj_dir = obj
export AS LD CC CPP AR NM
export STRIP OBJCOPY OBJDUMP
export obj_dir
CFLAGS := -Wall -O0
CFLAGS += -I $(shell pwd)/include
LDFLAGS := -lm
export CFLAGS LDFLAGS
OUTPUT_DIR := ./output
TOPDIR := $(shell pwd)
export TOPDIR
TARGET := show_file
obj-y += main.o
obj-y += src/
all: distclean
mkdir $(OUTPUT_DIR)
make -C ./ -f Makefile.build
$(CC) $(LDFLAGS) -o $(OUTPUT_DIR)/$(TARGET) $(obj_dir)/built-in.o
clean:
rm -f $(shell find -name "*.o")
rm -f $(TARGET)
distclean:
rm -f $(shell find -name "*.o")
rm -f $(shell find -name "*.d")
rm -f $(TARGET).exe
rm -rf $(OUTPUT_DIR)/
find . -name "$(obj_dir)" -type d -exec rm -rf {} \; -prune
Makefile.build
PHONY := __build
__build:
obj-y :=
subdir-y :=
include Makefile
# obj-y := a.o b.o c/ d/
# $(filter %/, $(obj-y)) : c/ d/
# __subdir-y : c d
# subdir-y : c d
__subdir-y := $(patsubst %/,%,$(filter %/, $(obj-y)))
subdir-y += $(__subdir-y)
# c/built-in.o d/obj/built-in.o
subdir_objs := $(foreach f,$(subdir-y),$(f)/$(obj_dir)/built-in.o)
# a.o b.o
cur_obj_all := $(filter-out %/, $(obj-y))
cur_objs := $(foreach f,$(cur_obj_all),$(obj_dir)/$(f))
dep_files := $(foreach f,$(cur_obj_all),.$(f).d)
dep_files := $(wildcard $(dep_files))
ifneq ($(dep_files),)
include $(dep_files)
endif
PHONY += $(subdir-y)
__build : $(subdir-y) built-in.o
$(subdir-y):
make -C $@ -f $(TOPDIR)/Makefile.build
built-in.o : $(cur_objs) $(subdir_objs)
$(LD) -r -o ./$(obj_dir)/$@ $^
dep_file = $@.d
$(obj_dir)/%.o : %.c
mkdir ./$(obj_dir)
$(CC) $(CFLAGS) -Wp,-MD,$(dep_file) -c -o $@ $<
.PHONY : $(PHONY)
目录结构
进去include目录
进去src目录
除了上述的两个makefile之外,其余的makefile只需要包含当前目录的文件及子目录,如下所示:
转:https://blog.csdn.net/weixin_45775710/article/details/115640255