当前位置:  技术问答>linux和unix

makefile 中不能编译

    来源: 互联网  发布时间:2015-05-27

    本文导语:  我在命令行上使用以下两条命令: gcc -g task1.c -o ~/work/bin/task1 gcc -g task1.c -o $HOME/work/bin/task1 都成功地执行了。但将这两条命令写在makefile中,就不能成功。 所以我只能使用以下命令: gcc -g task1.c -o /root/work...

我在命令行上使用以下两条命令:
gcc -g task1.c -o ~/work/bin/task1
gcc -g task1.c -o $HOME/work/bin/task1
都成功地执行了。但将这两条命令写在makefile中,就不能成功。
所以我只能使用以下命令:
gcc -g task1.c -o /root/work/bin/task1
请问这是什么原因?谢谢!

|
gcc -g task1.c -o $(HOME)/work/bin/task1

不同于shell,在makefile中
To substitute a variable's value, write a dollar sign followed by the name of the variable in parentheses or braces: either `$(foo)' or `${foo}' is a valid reference to the variable foo.

|
在开发大系统时,经常要将程序划分为许多模块.各个模块之间存在着各种各样的依赖关系,在 UNIX 中通常使用 Makefile来管理 .Makefile其实很复杂,我向大家推荐由Stallman写的手册,那里有最详尽的描述.这里只想说一些最常用的功能. 

先举一个例子: 
有a.c b.c两个程序. 
a.c 
extern void p(char *); 
main() 

p("hello world"); 


b.c 
#include 
void p(char *str) 

printf("%sn",str); 


Makefile 
hello:a.c b.c 
gcc a.c b.c -o hello 
---- 
这里是一个Tab(注意一定要有一个Tab) 

执行make 
gcc a.c b.c -o hello 
产生一个叫hello的可执行程序. 

Makefile时由规则来组成的,每一条规则都有三部分组成:目标(object),依赖(dependency)和命令(command).在上面的例子中, Makefile只有一条规则,其目标为hello,期依赖为a.c b.c,其命令为gcc a.c b.c -o hello. 

依赖可以是另一条规则的目标,也可以是文件.每一条规则被这样处理.如目标是一个文件是:当它的依赖是文件时,如果依赖的时间比目标要新, 则运行规则所包含的命令来更新目标; 如果依赖是另一个目标则用同样的方法先来处理这个目标.如目标不是一个存在的文件时,则一定执行. 

例如: 
Makefile 
hello:a.c b.o 
gcc a.c b.o -o hello 
b.o:b.c 
gcc b.c -c 

当运行 make时,可以接一目标名作为参数,表示要处理改目标.如没有参数,则处理第一个目标.对上一个例子执行 make ,则是处理hello这个目标. hello依赖于文件a.c和另一个目标 b.o,则先去处理b.o,调用gcc b.c -c来更新b.o,之后返回,调用gcc a.c b.o -o hello 来更新hello. 

定义变量: 
在makefile中可以定义自己的变量,例如: 
CC = gcc 
hello:a.c b.c 
$(CC) a.c b.c 

特殊变量: 
$@ 目标的名字 
$

    
 
 

您可能感兴趣的文章:

  • 从网上载了个C++程序的源代码,包含38个.cpp和.h,还有makefile.in和makefile.am两个文件,但无configure和makefile.请问怎么编译?谢谢!
  • linux下面用makefile编译的问题,请高手指点。
  • makefile 的嵌套编译问题
  • 关于多层Makefile编译的问题
  • 寻本详细讲解MAKEFILE和各编译器的书
  • 如何在Makefile中定义宏进行条件编译?
  • 自己编写一个程序编译进内核,要修改makefile文件吗?
  • 用-g编译器选项编译程序就在makefile中按下面样子的加进去吗:
  • 编译条件“-lpthread”应该加在makefile的哪里阿?
  • 急!请问大虾,如何书写UNXI下的MakeFile以编译C(调用了某些库)程序?
  • 帮帮忙啊!关于用makefile编译?
  • 驱动模块可以编入内核,想单独编译成模块,makefile怎么写?
  • 模块编译的小问题,对makefile的理解
  • 如何编写Makefile,使得只编译改变的文件
  • 有关makefile编译出错的一个问题。。。。
  • 如何在编译的时候输出Makefile中的变量值?
  • 请问编译静态链接库的makefile该如何写?
  • 如何写出兼容于BSD MAKE、GNU MAKE、SOLARIS MAKE的条件编译Makefile?
  • makefile中如何把一个子文件夹中的文件一起编译了?
  • Makefile中编译错误
  • ./configure 不能生成Makefile
  • QT程序通过Qmake生成的makefile能不能做make install?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Makefile.in,Makefile.am,Makefile.bor应该怎么用?
  • makefile.am和makefile.in是什么文件,与makefile有什么联系吗?
  • 最近在学习linux C 看到了makefile部分,觉得makefile的语法很难理解,Makefile 的语法是不是shell语法?
  • 求解makefile问题,makefile.conf的作用?
  • 有makefile.am,有 makefine.in 为什么就是没有Makefile?
  • makefile如何调用文件目录下的makefile
  • 请教根据Makefile.am自动生成Makefile的问题
  • 怎麼樣使Makefile.in生成Makefile?
  • 【急!】一个程序里有好多文件夹里都有Makefile,如何找到最管用的makefile
  • 【makefile使用】请问怎样在shell中获取makefile的最终目标?
  • unix下面make makefile文件,提示“makefile is up-to-date",怎么办呀?
  • Makefile使用遇到的问题!"Makefile:3:missing the separator.stop"在线等待.......
  • Makefile是如何输出执行的路径的,表示执行的是那个Makefile
  • 下的tar.gz源码里只有makefile.in和makefile.am
  • 一句 makefile 的解释 -- makefile 与 shel 结合
  • linux makefile error :Makefile:335: *** commands commence before first target。
  • [test@localhost ~]$ cat <makefile >catfile 跟cat > catfile <makefile是一样的吧?
  • 关于makfile,makefile.in, makefile.am. configure之间的关系
  • win32下编译Linux 下的项目(makefile.am和makefile.in)
  • 关于makefile的问题。一个makefile如何生成两个可执行文件。


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3