如何使makefile主机依赖?

mor*_*icz 4 linux makefile

我需要使用或不使用某些库来编译我的程序,具体取决于它运行的两个主机中的哪一个.我不知道HOST=在makefile 的右侧使用什么来使我的工作符合我的要求:

   ifeq(${HOST},${ADDITIONAL_LIBS_HOST})
   ADD_LIBS= ...   
Run Code Online (Sandbox Code Playgroud)

${ADDITIONAL_LIBS_HOST} 是来自的主人的名字 echo ${HOSTNAME}

lar*_*sks 8

一些想法:

  • 这是GNU autoconf旨在解决的那种情况.运行./configure,找出可用的库,并生成适当的Makefile.

  • 您可以通过执行以下操作来获取当前主机名:

    HOST=$(shell hostname)
    
    Run Code Online (Sandbox Code Playgroud)

    然后你可以在条件中使用它.

  • 您可以改为让Makefile执行以下操作:

    include Makefile.local
    
    Run Code Online (Sandbox Code Playgroud)

    然后在每个主机上有不同的Makefile.local文件.

Re:你的评论,给出像这样的Makefile:

HOST=$(shell hostname)

all:
    @echo $(HOST)
Run Code Online (Sandbox Code Playgroud)

将生成以下输出:

$ make all
fafnir.local
Run Code Online (Sandbox Code Playgroud)

(假设你当地的主人是"fafnir.local".我的是哪个.)

  • `HOST=$(shell 主机名)` 工作正常。请注意,无论出于何种原因,您都决定将 `HOSTNAME` 大写,它实际上并不是命令的名称。 (2认同)