小编Chr*_*aaa的帖子

我可以在包含的 makefile 中有局部变量吗?

我正在管理一个在许多文件夹中包含数百个 c 文件的系统,有多个目标,因此并非每个构建中都需要所有 c 文件。

因为并非所有文件都是必需的,所以我不能使用纯递归构建。而且我不想这样做,因为无论如何我都不想有一个带有神秘依赖关系的缓慢串行构建。

我广泛提出的是一个顶级生成文件,我在其中拉入文件夹列表并包含每个文件夹中的生成文件。

SUB_MAKEFILES := $(foreach subdir,$(SUBDIRS), $(subdir)/subdir.mk)
-include $(SUB_MAKEFILES)
Run Code Online (Sandbox Code Playgroud)

有些文件夹有特定的文件要编译,所以包含的文件非常简单;

srcs += path/a.c path/b.c
deps += path/a.d path/b.d
objs += op/path/a.o op/path/b.o

op/path/%.o: path/%.c path/subdir.mk
   compile ...
Run Code Online (Sandbox Code Playgroud)

我不想这样做几十次,所以我有一个通用模式,用于所有要编译的文件夹;

PATH155 := src/f1/f2/f3/f4

srcs += $(shell $(FFshell) $(PATH155) -maxdepth 1 -name '*.c')
deps += $(addprefix ${OUT_DIR}, $(patsubst %.c,%.d,$(shell $(FFshell) $(PATH155) -maxdepth 1 -name '*.c')))
objs   += $(addprefix ${OUT_DIR}, $(patsubst %.c,%.o,$(shell $(FFshell) $(PATH155) -maxdepth 1 -name '*.c')))

$(OUT_O_DIR)$(PATH155)/%.o: $(PATH155)/%.c $(PATH155)/subdir.mk
    gcc -c $(CFLGS) -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
Run Code Online (Sandbox Code Playgroud)

这是有效的,但是我想避免为 …

makefile gnu-make

7
推荐指数
1
解决办法
3530
查看次数

如何增加文件中的十六进制数

一个常见的 CI 构建类型问题,我有一个标头,其中包含我想要在构建之前增加的版本号。

所以测试.h

#define VERSION_PROJECT_MAJOR   01
#define VERSION_PROJECT_MINOR   69
#define VERSION_VENDOR          2
Run Code Online (Sandbox Code Playgroud)

次要版本需要获得 6A。

环境是带有 gnu utils 的 DOS/WIN,所以我认为 awk 是可行的方法,但我不能完全旋转它。构建系统的版本不能就地执行,但我可以忍受。

到目前为止,我已经写了一篇相当不错的俏皮话;

awk  "/#define VERSION_PROJECT_MINOR/{$0=$1 \" \" $2 \"   \" (strtonum(\"0x\" $3)+1)}1;" test.h
Run Code Online (Sandbox Code Playgroud)

这将版本号设置为106,如何使其输出十六进制???

awk hex decimal increment

0
推荐指数
1
解决办法
439
查看次数

标签 统计

awk ×1

decimal ×1

gnu-make ×1

hex ×1

increment ×1

makefile ×1