我有一个第三方makefile,我希望在第一个构建自定义目标(T2)之前不会构建其中一个目标(T1).通常,这可以通过使T2成为T1的先决条件来实现.但是,T1在其中一个规则中使用了$ ^ ..因此,通过添加先决条件,我最终打破了构建......我所拥有的是:
T1: x y z T2
$(MAKE) -j $^;
# fails because T2 should not be passed to the make!!!
.PHONY: T2
T2:
#do some linking and prep for T1
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以确保T2在T1之前运行?(注意:上面的例子实际上有点简化.T1实际上是Linux内核makefile中的vmlinux目标,因此重写它不仅困难,而且使代码不可移植.而且,我之前无法运行T2由于某些其他依赖项而在内核上调用make).
我玩Docker并制作实用程序并尝试编写仅在Dockerfile更改时重建docker镜像的规则.
我的项目结构如下:
tree .
.
??? Dockerfile
??? Makefile
??? project
??? 1.js
Run Code Online (Sandbox Code Playgroud)
我的Dockerfile非常简单:
FROM ubuntu
RUN apt-get update
RUN apt-get install -y curl
RUN curl -sL https://deb.nodesource.com/setup | sudo bash -
RUN apt-get update
RUN apt-get install -y build-essential nodejs
VOLUME ["/project"]
ENTRYPOINT ["cat"]
CMD ["project/1.js"]
Run Code Online (Sandbox Code Playgroud)
它只是通过nodejs安装创建简单的ubuntu映像,并从共享目录运行脚本.
现在我想从Makefile运行这个图像.当我更改Dockerfile时,我想重建图像.Makefile看起来像:
default: run
run: build
docker run -v $(CURDIR)/project:/project app-server
build: Dockerfile
docker build -t app-server .
Run Code Online (Sandbox Code Playgroud)
现在当我执行sudo make命令时,它每次都会重建一个图像.
如何在Dockerfile更改时强制make执行构建任务?
这是我的第一个Makefile,我无法弄清楚使用的一些语法.问题标在下面
C := gcc
CFLAGS := -Wall -Werror -std=
PROG := program_1\
program_2\
program_3
SRCS := program_1.c \
program_2.c \
program_3.c
OBJS := ${SRCS:.c=.o}
all: ${OBJS}
${CC} ${OBJS} -o ${PROG}
clean:
rm -f ${PROG} ${OBJS}
.c.o:
${CC} ${CFLAGS} -c $<
Run Code Online (Sandbox Code Playgroud)
什么.c = .o是什么意思?在OBJS中:= $ {SRCS:.c = .o}
不知道$ <mean here和.co?.co:$ {CC} $ {CFLAGS} -c $ <