📄 chinaunix_net - 求关于gnu automake autoconf 的实用例子.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0042)http://www.chinaunix.net/jh/23/417883.html -->
<!-- Generated by LibHtt 2004-12-11 21:13:11 Templet source: /data0/chinaunix.net/cgisrc/do_html/viewtopics_jh.html Warnings and errors: 0--><HTML><HEAD><TITLE>ChinaUnix.net - 求关于gnu automake autoconf 的实用例子 - 中国Unix技术社区</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META
content=Linux,Freebsd,Solaris,Sco,HP-UX,IBM-AIX,cisco,oracle,java,cgi,mysql,perl,Apache,proFTP,Sendmail,Qmail,DNS,Squid,Rsync,SSL
name=keywords>
<META content=中国UNIX技术社区 name=description>
<STYLE type=text/css>BODY {
FONT: 12pt 宋体
}
TH {
FONT: 12pt 宋体
}
INPUT {
FONT: 12pt 宋体
}
SELECT {
FONT: 12pt 宋体
}
TEXTAREA {
FONT: 12pt 宋体
}
SELECT {
FONT: 12pt 宋体
}
checkbox {
FONT: 12pt 宋体
}
BODY {
FONT-SIZE: 12pt; FONT-FAMILY: "宋体", "serif"
}
TD {
FONT-SIZE: 12pt; FONT-FAMILY: "宋体", "serif"
}
P {
FONT-SIZE: 9pt; LINE-HEIGHT: 150%
}
</STYLE>
<META content="MSHTML 6.00.2800.1498" name=GENERATOR></HEAD>
<BODY>
<SCRIPT
src="ChinaUnix_net - 求关于gnu automake autoconf 的实用例子.files/title.js"></SCRIPT>
<DIV align=center>
<CENTER>
<TABLE cellSpacing=0 cellPadding=0 width="75%" border=0>
<TBODY>
<TR>
<TD height=45>
<P align=center><B>ChinaUnix-C/C++讨论区精华帖</B></P></TD></TR>
<TR>
<TR>
<TD width="100%" bgColor=#49ade9 colSpan=5 height=2><IMG height=1
src="ChinaUnix_net - 求关于gnu automake autoconf 的实用例子.files/bline.gif"
width=1></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="75%" border=0>
<TBODY>
<TR>
<TD vAlign=center align=middle bgColor=#edf0f5 height=40><FONT
size=5><B>求关于gnu automake autoconf 的实用例子</B></FONT></TD></TR>
<TR>
<TD align=middle bgColor=#edf0f5 height=20><SMALL>http://www.chinaunix.net
作者:<A
href="http://bbs.chinaunix.net/forum/profile.php?mode=viewprofile&u=182692"
target=_blank>wubulen</A> 发表于:2004-10-02
03:27:53</FONT></SMALL></TD></TR>
<TR>
<TD align=middle bgColor=#edf0f5>
<TABLE style="WORD-BREAK: break-all; BORDER-COLLAPSE: collapse"
cellSpacing=0 cellPadding=0 width="90%" align=center border=0>
<TBODY>
<TR>
<TD
vAlign=top><BR>关于automake 和 autoconf 的例子网上有很多,但是里面应用的例子都过于简单,基本上都是"hello world", 大家是否有比较复杂的例子提供供学习。我现在有个比较大的项目,有20多个C 源文件和头文件,又放在不同的目录下,最后安装后要生成好几个可执行文件,这样我就不知道Makefile.am 和 configure.in 怎么写, 比如说 AC_INIT 宏?<BR><BR></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD align=middle><SMALL>【<A
href="http://bbs.chinaunix.net/forum/posting.php?mode=reply&t=417883">发表回复</A>】【<A
href="http://bbs.chinaunix.net/forum/viewtopic.php?t=417883">查看论坛原帖</A>】【<A
href="http://bbs.chinaunix.net/forum/favorites.php?mode=add&t=417883">添加到收藏夹</A>】【<A
href="javascript:window.close()">关闭</A>】</SMALL> </TD></TR></TBODY></TABLE><!-----------回复----------->
<TABLE cellSpacing=0 cellPadding=0 width="75%" border=0>
<TBODY>
<TR>
<TD bgColor=#edf0f5>
<TABLE style="WORD-BREAK: break-all; BORDER-COLLAPSE: collapse"
cellSpacing=0 cellPadding=0 width="90%" align=center border=0>
<TBODY>
<TR>
<TD>
<HR>
<SMALL> <A
href="http://bbs.chinaunix.net/forum/profile.php?mode=viewprofile&u=29509"
target=_blank>kj501</A> 回复于:2004-10-02 10:55:53</SMALL></TD></TR>
<TR>
<TD>configure.in写一个就够了,Makefile.am要在不同的目录下分别写。
<BR>这些东东都是要实际操作才能理解的。能不能把你的情况说详细一些。<BR><BR></TD></TR>
<TR>
<TD>
<HR>
<SMALL> <A
href="http://bbs.chinaunix.net/forum/profile.php?mode=viewprofile&u=182692"
target=_blank>wubulen</A> 回复于:2004-10-02 23:27:19</SMALL></TD></TR>
<TR>
<TD>感谢你的回答。我再讲我的例子说的详细些(举例)。现在我有两个子目录,dir1 和 dir2, 在子目录dir1 下有源文件 code1.c, code1.h, code2.c, code2.h, code3.c, code3.h, 在子目录dir2下同样有几个源文件,code4.c, code4.h, code5.c, code5.h, code6.c, code6.h。最后我希望在bin目录下生成几个可执行文件,比如 code1.c, code2.c 生成 prog1, 而 code3.c 生成prog2, code4.c 和 code5.c 生成 prog3。 更复杂一点的是在不同子目录下的程序互相关联,比如 code2.c 中需要用到 code6.c 中的函数。还有在不同目录下的两个文件生成一个可执行文件,如 code2.c 和 code6.c 生成 prog4。
<BR><BR>还有一个问题,是否可以指定编译器。通常在linux下就用 gcc, 但是有些程序需要特殊的编译器,比如mpicc (编译mpi 函数)。这如何在configure.in 文件中指定?
<BR><BR>谢谢指教。<BR><BR></TD></TR>
<TR>
<TD>
<HR>
<SMALL> <A
href="http://bbs.chinaunix.net/forum/profile.php?mode=viewprofile&u=4101"
target=_blank>mep</A> 回复于:2004-10-03 10:57:49</SMALL></TD></TR>
<TR>
<TD>我们在SourceForge上发布的项目CORBA Component Model实现StarCCM有几十万行代码。支持Win+VC nmake和linux、solaris。原代码中有configure.in和Makefile.in(没有Makefile.am,我们自己写的Makfile.in),可以看到,StarCCM中如何使用.m4;如何在一个大项目中包含几个项目。
<BR>网址:http://sf.net/projects/starccm/<BR><BR></TD></TR>
<TR>
<TD>
<HR>
<SMALL> <A
href="http://bbs.chinaunix.net/forum/profile.php?mode=viewprofile&u=29509"
target=_blank>kj501</A> 回复于:2004-10-03 11:40:35</SMALL></TD></TR>
<TR>
<TD>[quote:656c0e17e3="wubulen"]感谢你的回答。我再讲我的例子说的详细些(举例)。现在我有两个子目录,dir1 和 dir2, 在子目录dir1 下有源文件 code1.c, code1.h, code2.c, code2.h, code3.c, code3.h, 在子目录dir2下同样有几个源文件,code4.c,..........[/quote:656c0e17e3]
<BR>bin目录是那个目录,是你的程序安装的目录吗?如果我估计得不错的话,应该是/usr/bin,或者是/usr/local/bin吧。
<BR>prog1应该是一个可以单独执行的程序吧。不需要调用自己编写的动态库文件吗?<BR><BR></TD></TR>
<TR>
<TD>
<HR>
<SMALL> <A
href="http://bbs.chinaunix.net/forum/profile.php?mode=viewprofile&u=29509"
target=_blank>kj501</A> 回复于:2004-10-03 17:39:25</SMALL></TD></TR>
<TR>
<TD>先来举一个简单的例子吧。如何写用code1.c, code2.c生成 prog1的configure.in和Makefile.am。
<BR>首先建立一个项目文件夹tt。在tt下建立dir1目录。 <BR>[code:1:78df12705f]
<BR>[kj501@s2023 dir1]$ mkdir tt
<BR>[kj501@s2023 dir1]$ mkdir tt/dir1
<BR>[/code:1:78df12705f]
<BR>然后在dir1目录中分别建立code1.c, code1.h, code2.c, code2.h,由于楼主没有给出源代码,我自己写了几个简单的语句,以便说明问题。
<BR>下面是code1.h: <BR>[code:1:78df12705f]
<BR>#include <stdlib.h> <BR><BR>void foo_a();
<BR>[/code:1:78df12705f] <BR>下面是code1.c: <BR>[code:1:78df12705f]
<BR>#include "code1.h" <BR><BR>void foo_a() <BR>{
<BR>printf("This is code1.\n"); <BR>}
<BR>[/code:1:78df12705f] <BR>下面是code2.h: <BR>[code:1:78df12705f]
<BR>#include <stdlib.h> <BR><BR>void foo_b();
<BR>[/code:1:78df12705f] <BR>下面是code2.c,这里让code.c作为prog1的入口点:
<BR>[code:1:78df12705f] <BR>#include "code1.h"
<BR>#include "code2.h" <BR><BR>void foo_b() <BR>{
<BR>printf("This is code2.\n"); <BR>}
<BR><BR>int main() <BR>{ <BR>foo_a(); <BR>foo_b(); <BR>}
<BR>[/code:1:78df12705f]
<BR>建立好这几个文件之后,下面就可以正式建立configure.in和Makefile.am了。
<BR>首先在tt目录下建立configure.in文件: <BR>[code:1:78df12705f]
<BR>#指定项目的一个源文件 <BR>AC_INIT(dir1/code2.c) <BR><BR>#指定项目名称和版本号
<BR>AM_INIT_AUTOMAKE(prog1, 0.0.1) <BR><BR>#检查编译器
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -