首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这个makefile是做什么的?

这个makefile是做什么的?
EN

Stack Overflow用户
提问于 2015-08-21 10:04:51
回答 2查看 409关注 0票数 2

我有以下makefile (Makefile.certify),并且当我执行时:

代码语言:javascript
复制
make -f Makefile.certify

它给了我一个:

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

代码语言:javascript
复制
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等。

我使用的是运行x86RHEL系统。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-21 10:22:54

  1. @前缀用于抑制make命令打印。如果不存在,make将在执行之前打印命令以输出。 你可以移除它,看它的区别。
  2. $?是依赖项列表。在您的特殊情况下,ARCH被定义为单个条目"x86_64“。因此,$?将被扩展到该值。但是,您可以尝试以下列方式修改ARCH值: ARCH=x86_64 i386
  3. 它试图从certify源文件为给定的体系结构构建cerfify.c二进制文件。每个二进制文件将位于自己的子目录中: /var/tmp/{i386|x86_64|i386_f64}/certify
票数 2
EN

Stack Overflow用户

发布于 2015-08-21 10:18:36

  1. @用于抑制执行的命令的正常“回波”。在for循环中使用它对我来说也是新的(删除它会改变输出中的任何内容吗?)
  2. $?makefile自动变量之一,这个意思是"The names of all the prerequisites that are newer than the target, with spaces between them"
  3. 它将遍历$?,阅读上面的内容

编辑:

$?实例

代码语言:javascript
复制
targetfile : firstfile secondfile thirdfile
    cat $? > $@

如果targetfile比其他3个文件()更早,那么makefile将在targetfile中将firstfilesecondfilethirdfile的内容连接在一起。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32137658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档