|

楼主 |
发表于 2004-10-12 17:05:06
|
显示全部楼层
最初由 lkzjhm 发表
有数据运算的时候最好在最好加上-lm
可我使用make的,如何加上-lm参数 ? 我的make是照下面文章做的
- 使用AotuMake轻松生成Makefile
-
- 摘要:
- 在 Unix 上写过程序的人一般都遇到过 Makefile,尤其是用 C 来开发程序的人。用 make 来开发和编译程序的确很方便,可是要写出一个MakeFile就不那么简单了。偏偏介? Makefile 的文件不多,GNU Make 那份印出来要几百页的文件,光看完 Overview 自己就快要先Over了,难怪许多人闻 Unix色变。本文将介绍如何利用 GNU Autoconf 及 Automake 这两 套软件来帮助『自动』产生 Makefile 文件,并且让开发出来的的软件可以象 Apache, MySQL 和常?的 GNU 软件一样,只要会 ``./configure\, ``make\, ``make install\ 就可以把程序安?到系统中。如果您有心开发 Open Source 的软件,或只是想在 Unix 系?下写 写程序。希望这份介绍文件能帮助您轻松的进入 Unix Programming 的殿堂。
-
- 1. 简介
- Makefile 基本上就是『目标』(target), 『关联』(dependencies) 和『动作』三者所组 成的一系列规则。而 make 就会根据 Makefile 的规则来?Q定如何编译 (compile) 和连接 (link) 程式。实际上,make 可做的不只是编译和连接程序,例如 FreeBSD 的 port collection 中,Makefile还可以做到自动下载远程程序,解压缩 (extract) , 打补丁 (patch),设定,然后编译,安装到系统中。
- Makefile 基本结构虽然很简单,但是妥善运用这些规则就可以变换出许多不同的花样。却也因为这样,许多刚刚开始学习写Makefile 时会觉得没有规范可以遵循,每个人写出来的Makefile都不大一样,不知道从哪里下手,而且常常会受到自己的开发环境的限制,只要环 境参数不同或者路径更改,可能 Makefile 就得跟着修改修改。虽然有 GNU Makefile Conventions (GNU Makefile惯例例)订出一些使用 GNU 程式设计时撰写 Makefile 的一些标准 和规范,但是内容很长而且很复杂,并且经常作一些调整,为了减轻程序开发人员维护Makefile 的负担,因此出现了Automake。
- 程序设计者只需要写一些预先定义好的宏 (macro),提交给Automake处理后会产生一个可 以供 Autoconf 使用的 Makefile.in文件。再配合利用 Autoconf产生的自动培植设置文件 configure 即可产生一份符合符合 GNU Makefile 惯例的 Makeifle 了。
-
- 2. 上路之前
- 在开始使用 Automake 之前,首先确认你的系统安装有如下软件:
-
- 1.
- GNU Automake
- 2.
- GNU Autoconf
- 3.
- GNU m4
- 4.
- perl
- 5.
- GNU Libtool (如果你需要产生 shared library)
- 建议最好也使用 GNU C/C++ 编译器 、GNU Make 以及其它 GNU 的工具程序来作为开发的 环境,这些工具都是属于 Open Source Software 不但免费而且功能强大。如果你是使用 Red Hat Linux 可以找到所有上述软件的 rpm 文件,FreeBSD 也有现成的 package 可以直 接安装,或也可以自行下载这些软件的源代码回来安装。下面的示例是在Red Hat Linux 5.2 + CLE2 的环境下所完成的。
-
- 3. 一个简单的例子
- Automake 所产生的 Makefile 除了可以做到程式的编译和连接,也已经把如何产生程序文件 (如 manual page, info 文件及 dvi 文件) 的动作,还有把源码文件包装起来以供发布都考虑进去了,所以程序源代码所存放的目录结构最好符合GNU 的标准惯例,接下来就用一个hello.c ?碜鑫印?br> 在工作目录下建立一个新的子目录"devel",再在 devel 下建立一个"hello" 的子目录,这个目录将作为存放 hello这个程序及其相关文件的地方:
- % mkdir devel
- % cd devel
- % mkdir hello
- % cd hello
- 用编辑器写一个hello.c文件,
- #include
- int main(int argc, char** argv) {
- printf(``Hello, GNU!\n\);
- return 0;
- }
- 接下来就要用 Autoconf 及 Automake ?聿?Makefile 文件了,
- 1.
- 用 autoscan 产生一个 configure.in 的原型,执行autoscan 后会产生一个
复制代码 |
|