63

我在我的目录中有一个生成文件,它构建具有某些环境变量集的脚本。如果我想在同一目录中创建另一个设置了不同环境变量的 makefile 怎么办?我应该如何命名这两个 make 文件?makefile.1有效吗makefile.2?我怎么称呼他们?

4

5 回答 5

90

您可以为 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

于 2012-08-21T15:07:58.683 回答
16

你可以随意命名makefile。我通常将其命名为somename.mk. 要稍后使用它,您需要告诉 make 您想要什么 makefile。-f为此使用选项:

make -f somename.mk
于 2012-08-21T15:10:52.663 回答
11

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

COMPILER = gcc
CCFLAGS1 = -g
CCFLAGS2 = -Wall

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

那么你可以说make aor make b。取决于你想要什么。

也可以使用 -f 标志来调用您要调用的生成文件。

于 2012-08-21T15:12:29.730 回答
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


于 2014-11-27T06:52:43.203 回答
0

我在同一个目录中有两个makefile。许多食谱具有相同的名称,这里有两种解决方案:

1.make中的前缀

proja_hello:
           @echo "hello A"

projb_hello:
           @echo "hello N"

2.保留两个单独的文件

  1. 项目 A 有makefile. 键入make hello
  2. 项目 B 有一个单独的 make 文件,名为projb.mk. 键入bmake hello
  3. This works since I've added alias bmake ='make -f projb.mk to my .bashrc. Note! This command can be called anywhere but only works where projb.mk exists. Note! You lose autocompletion of make with the alias and typing make -f projb.mk hello is not better than typing make projb_hello.
于 2021-09-20T13:24:33.760 回答