小弟刚刚学LINUX 下的C/C++编程,同事告诉我要用makefile来编译 ,再问之如何写makefile时,答:makefile是很难的东西,你可以使用国外高手写的makefile来编译。
疑惑中,打开所谓高手的makefile,果然好长,果然看不懂。
不服气,到网上找一些makefile的教程,尽是些文件依赖、目标之类的理解不了的名次。
于是,谬论就这样在心中扎根了。
两星期后,也就是今天,偶然的一个测试让我明白了————makefile实在是很简单,为啥教程都那么复杂呢?
当然,本文所提到的,是针对初学者的"Hello World!"级别的makefile,并不能否认makefile的高级功能的复杂和强大。我目前所能够理解到的makefile,就是一个批处理程序而已。(如同Linux下的shell文件)
makefile关键的处理步骤,就是调用编译程序来执行编译,windows下是cl,Linux下是g++。Windows下的make程序是nmake.exe,Linux下是make。
咱们先写一个简单的C程序:
#include <stdio.h>
int main() { printf("hello world!\n"); getchar(); return 1; }
|
把这个程序保存为test.cpp。
在WINDOWS下执行编译(先执行c:\programe files\vs2003\Vc7\bin\vcvars32.bat):cl test.cpp
在Linux下执行编译:g++ test.cpp
很简单嘛!
然后写makefile文件:
anyname: cl test.cpp #在linux下,上一行写成 g++ test.cpp #注意cl这一行:前面的缩进是一个tab键,一定要是tab才可以 #第一行的anyname可以是任何名字,但是要加上冒号 |
在WINDOWS下使用NMAKE编译(先执行c:\programe files\vs2003\Vc7\bin\vcvars32.bat):nmake.exe
在Linux下使用MAKE编译:make
呵呵,很简单吧?其实makefile中大多都是变量的定义,最终把这些变量的值作为cl或g++的参数来使用。
希望任何教程都先展示一个Hello World后在开始传教,对于菜鸟来说,第一次成功的信心是最好的鼓励。
分享到:
相关推荐
或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个...
或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个...
或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和 professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个...
或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个...
或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个...
的 IDE 都为你做了这个工作,但要做一个好的和 professional 的程序员, makefile 还是要懂。 这就好像现在有这么多的 HTML 的编辑器,但如果你想成为一个专业人士,你还是要了解 HTML 的标识的含义。特别在 Unix 下...
或许很多Winodws的程序员都不知道这个东西,因为那些Windows 的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员, makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个...
也有分析认为,谷歌并不想做一个简单的手机终端制造商或者软件平台开发商,而意在一统传统互联网和 移 动互联网。----------------------------------- Android 编程基础 4 Android Android Android Android 手机新...
首先是操作系统的名字改变了,原因在于虽然我们的试验性 OS从前辈们那里借鉴了很多东西,但其各个部分的设计(比如文件系统和内存管理)往往有其独特之处,所以我将原先的 Tinix(本意为 TryMinix)改成了新名字...
首先是操作系统的名字改变了,原因在于虽然我们的试验性 OS从前辈们那里借鉴了很多东西,但其各个部分的设计(比如文件系统和内存管理)往往有其独特之处,所以我将原先的 Tinix(本意为 TryMinix)改成了新名字...
根本没有编译器、链接器、Makefile的概念,甚至连命令行都没用过,然而这些都是初学编程就应该建立起来的基本概念。另一方面,编译器、链接器和C语言的语法有密切的关系,不了解编译器、链接器的工作原理,也不可能...
设为clicked(),Receive 设为myDlg,Slot 设为accept()。这样就实现了单击 这个按钮使这个对话框关闭并发出Accepted 信号的功能。下面我们将利用这个 信号。 7.修改主函数main.cpp,如下: #include #include ...
Goroutines可以被视为轻量级线程,而channels则允许它们之间的安全通信,实现了CSP(Communicating Sequential Processes)并发模型。 3. **垃圾回收**:Go语言拥有自动的垃圾回收机制,这使得程序员无需手动管理...
(都经行同样次数的隐式类型转换),那么将产生一个二义性错误.这将生成一个运行时 错误,程序挂起在产生二义性调用的地方.一个简单的例子是,注册两个函数,一个函数 接受一个int参数,另外一个函数接受一个float参数. ...