簡體   English   中英

這個makefile有什么作用?

[英]What does this makefile do?

我有以下makefile(Makefile.certify),執行時:

make -f Makefile.certify

它給了我一個:

/bin/sh: line 23: -o: command not found

PROG=certify
TMP=/var/tmp
ARCH=x86_64
_CC=/bin/cc

all: ${PROG}

${PROG}: ${ARCH}
    @for mode in $? ; do \
            case $${mode} in        \
                    i386)           \
                            CC="${_CC} -g -D__x86";         \
                            ;;      \
                    i386-f64)       \
                            CC="${_CC} -D_FILE_OFFSET_BITS=64 -g -D__x86";\
                            ;;      \
                    amd64)          \
                            CC="${_CC} -m64 -g -D__x86 -D__ia64 -D__GNUC";\
                            ;;      \
                    *)              \
                            ;;      \
            esac;           \
            $${CC} -o ${TMP}/$${mode}/$@ ${TMP}/$@.c;       \
    done

我不是真的使用makefilesc ,但是我必須處理這個。

我的問題是:

  1. 為什么for循環需要@前綴?
  2. 什么是$? 在for循環中?
  3. 此makefile可能執行什么操作? 顯然,它試圖匯編我的證明。 基於執行或類似系統的體系結構的c file ,但是我看不到它將如何選擇i386amd64等。

我正在使用運行RHELx86系統。

  1. @前綴用於禁止make打印命令。 如果不存在, make將在執行之前打印命令以輸出。

    您可以將其刪除並查看區別。

  2. $? 是依賴項列表。 在您的特定情況下, ARCH被定義為單個條目“ x86_64”。 那么$? 將擴展為該值。 但是您可以嘗試通過以下方式修改ARCH值:

     ARCH=x86_64 i386 
  3. 它嘗試從cerfify.c源文件構建給定體系結構的certify二進制文件。 每個二進制文件將位於自己的子目錄中:

     /var/tmp/{i386|x86_64|i386_f64}/certify 
  1. @用於禁止執行的命令的正常“回顯”。 在for循環中使用它對我來說也是新的(刪除它會更改輸出中的任何內容嗎?)

  2. $? makefile自動變量之一 ,它的意思是"The names of all the prerequisites that are newer than the target, with spaces between them"

  3. 它將遍歷$? , 閱讀以上部分

編輯:

$?例子

targetfile : firstfile secondfile thirdfile
    cat $? > $@

如果targetfile比其他3個文件年紀大了 ,makefile文件將拼接的內容firstfilesecondfilethirdfile在一起targetfile

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM