一个目录中有多个makefile

一个目录中有多个makefile,makefile,Makefile,我在我的目录中有一个makefile,它使用特定的环境变量集构建脚本。如果我想在同一个目录中创建另一个设置了不同环境变量的makefile,该怎么办?我应该如何命名这两个make文件?makefile.1和makefile.2有效吗?如何命名它们?您可以为makefile.win和makefile.nix等文件指定合理的名称并使用它们: make -f makefile.win make -f makefile.nix 或者具有包含以下内容的生成文件: win: make -f makef

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

您可以为makefile.win和makefile.nix等文件指定合理的名称并使用它们:

make -f makefile.win
make -f makefile.nix
或者具有包含以下内容的生成文件:

win:
  make -f makefile.win

nix:
  make -f makefile.nix

使用
makewin
makenix

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

make -f somename.mk

实际上,在同一make文件中可以有两组环境变量。比如说

COMPILER = gcc
CCFLAGS1 = -g
CCFLAGS2 = -Wall

a: main.c
        ${COMPILER} ${CCFLAGS1} main.c
b: test.c
        ${COMPILER} ${CCFLAGS2} test.c
然后你可以说
makea
makeb
。取决于你想要什么


也可以使用-f标志调用要调用的makefile。

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



    ifeq ($(ENV),ENV1)
     ENV_VAR = THIS
    else
     ENV_VAR = THAT
    endif

    default : test

    .PHONY : test
    test:
            @echo $(ENV_VAR)

然后,您可以简单地使用参数运行make命令



    make ENV=ENV1


在后一种情况下,
make
的默认行为是什么?默认情况下,它将使用名为Makefile的行为。如果不指定目标,则默认目标是文件中第一个配方中的目标(当然,这可能取决于后面的配方)。