[英]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
我不是真的使用makefiles
或c
,但是我必須處理這個。
我的問題是:
- 為什么for循環需要
@
前綴?- 什么是
$?
在for循環中?- 此makefile可能執行什么操作? 顯然,它試圖匯編我的證明。 基於執行或類似系統的體系結構的
c file
,但是我看不到它將如何選擇i386
或amd64
等。
我正在使用運行RHEL
的x86
系統。
@
前綴用於禁止make
打印命令。 如果不存在, make
將在執行之前打印命令以輸出。
您可以將其刪除並查看區別。
$?
是依賴項列表。 在您的特定情況下, ARCH
被定義為單個條目“ x86_64”。 那么$?
將擴展為該值。 但是您可以嘗試通過以下方式修改ARCH
值:
ARCH=x86_64 i386
它嘗試從cerfify.c
源文件構建給定體系結構的certify
二進制文件。 每個二進制文件將位於自己的子目錄中:
/var/tmp/{i386|x86_64|i386_f64}/certify
@
用於禁止執行的命令的正常“回顯”。 在for循環中使用它對我來說也是新的(刪除它會更改輸出中的任何內容嗎?)
$?
是makefile自動變量之一 ,它的意思是"The names of all the prerequisites that are newer than the target, with spaces between them"
它將遍歷$?
, 閱讀以上部分
編輯:
$?
例子
targetfile : firstfile secondfile thirdfile
cat $? > $@
如果targetfile
是比其他3個文件年紀大了 ,makefile文件將拼接的內容firstfile
, secondfile
和thirdfile
在一起targetfile
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.