我有以下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,但我必须处理这个问题。
我的问题是:
@前缀?$?是什么?c file,基于系统执行的架构或类似的东西,但是我看不出它将如何选择i386或amd64等。我使用的是运行x86的RHEL系统。
发布于 2015-08-21 10:22:54
@前缀用于抑制make命令打印。如果不存在,make将在执行之前打印命令以输出。
你可以移除它,看它的区别。$?是依赖项列表。在您的特殊情况下,ARCH被定义为单个条目"x86_64“。因此,$?将被扩展到该值。但是,您可以尝试以下列方式修改ARCH值:
ARCH=x86_64 i386certify源文件为给定的体系结构构建cerfify.c二进制文件。每个二进制文件将位于自己的子目录中:
/var/tmp/{i386|x86_64|i386_f64}/certify发布于 2015-08-21 10:18:36
@用于抑制执行的命令的正常“回波”。在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将在targetfile中将firstfile、secondfile和thirdfile的内容连接在一起。
https://stackoverflow.com/questions/32137658
复制相似问题