相关疑难解决方法(0)

强制Makefile中的先决条件顺序

我有一个第三方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).

makefile gnu-make

14
推荐指数
1
解决办法
7987
查看次数

Docker with make:在Dockerfile上构建映像更改

我玩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 docker

6
推荐指数
2
解决办法
1万
查看次数

使用.c = .o和$ <了解Makefile

这是我的第一个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)
  1. 什么.c = .o是什么意思?在OBJS中:= $ {SRCS:.c = .o}

  2. 不知道$ <mean here和.co?.co:$ {CC} $ {CFLAGS} -c $ <

c makefile

4
推荐指数
1
解决办法
1万
查看次数

标签 统计

makefile ×3

c ×1

docker ×1

gnu-make ×1