一个目录中有多个makefile

73

我在我的一个目录中有一个makefile,它使用特定的环境变量构建脚本。如果我想在同一个目录中创建另一个使用不同环境变量的makefile,该如何命名这两个makefile呢?可以用makefile.1makefile.2吗?如何调用它们呢?

5个回答

111

你可以为文件取一个有意义的名称,比如makefile.win和makefile.nix,并使用它们:

make -f makefile.win
make -f makefile.nix

或者有一个包含以下内容的Makefile:

win:
  make -f makefile.win

nix:
  make -f makefile.nix

并使用 make winmake nix


1
在后一种情况下,make 的默认行为是什么? - pretzlstyle
1
默认情况下,它将使用名为Makefile的文件。如果您没有指定目标,则默认目标是文件中第一个配方中的目标(当然可以依赖于后面的配方)。 - Jeffrey Benjamin Brown

19

你可以用任何你想要的名字来命名makefile。我通常会把它命名为somename.mk。稍后要使用它,你需要告诉make你想要哪个makefile。你可以使用-f选项来实现:

make -f somename.mk

11

实际上,您可以在同一个make文件中设置两组环境变量。例如:

COMPILER = gcc
CCFLAGS1 = -g
CCFLAGS2 = -Wall

a: main.c
        ${COMPILER} ${CCFLAGS1} main.c
b: test.c
        ${COMPILER} ${CCFLAGS2} test.c

那么你可以直接使用make a或者make b。根据你的需求而定。

同时,通过-f标志,可以调用你想要的makefile。


3
您可以这样做,而不是为了同一个目的使用多个makefile。您可以将环境传递给同一个makefile或设置标志。例如:



    ifeq ($(ENV),ENV1)
     ENV_VAR = THIS
    else
     ENV_VAR = THAT
    endif
default : test
.PHONY : test test: @echo $(ENV_VAR)

然后,您只需使用参数运行make命令



    make ENV=ENV1



1

我在同一目录下有两个makefile文件。许多配方具有相同的名称,这里有两种解决方案:

1. 在make中添加前缀

proja_hello:
           @echo "hello A"

projb_hello:
           @echo "hello N"

2. 保持两个独立的文件

  1. 项目A有一个名为makefile的文件。键入make hello
  2. 项目B有一个单独的名为projb.mk的 make 文件。键入bmake hello
  3. 这样做是可行的,因为我已经在我的.bashrc中添加了alias bmake ='make -f projb.mk'。注意!这个命令可以在任何地方调用,但只能在存在projb.mk 的位置工作。 注意!使用别名会导致失去 make 自动补全功能,而输入make -f projb.mk hello不比输入make projb_hello更好。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接