关于automake工具的使用:使用了第三方的库和头文件,怎样写makefile.am文件

C、C++和Java语言
回复
freshguy
帖子: 12
注册时间: 2010-08-25 20:36
送出感谢: 0
接收感谢: 0

关于automake工具的使用:使用了第三方的库和头文件,怎样写makefile.am文件

#1

帖子 freshguy » 2010-09-09 21:56

开发一个C++程序,手写Makefile文件太麻烦了,想要使用automake工具;

使用了第三方的的库(.a文件)和一些头文件,如下面的目录结构:

库的头文件放在:/home/me/projectA/include/pro 下(pro下是很多的.h头文件,其中包括一个最关键的头文件dataM.h)
库文件放在: /home/me/projectA/lib 下(lib下是一些.a文件,其中包括要用到的一个文件libdataM.a)


我的Makefile.am文件如下:
----------------------------------------------------------------------------
AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS=hpMain

INCLUDES= -I/home/me/projectA/include/pro #库的头文件dataM.h的路径
AM_LDFLAGS= -lpthread -L/home/me/projectA/lib #库的libdataM.a文件所在的路径

hpMain_SOURCES = ……(自己工程里的.h文件和.cpp,略去)

----------------------------------------------------------------------------

说明:在我的程序中使用#include <pro/dataM.h>将头文件包含进来


automake --add-missing // 运行正常
./configure // 运行正常
make // 报了‘pro/dataM.h’:No such file or directory,然后就是一系列的有关dataM.h中定义过的类和函数:was not declared in this scope,也就是说头文件和库的路径设置有问题,导致了没有包含进来第三方的库


我用 hpMain_LDADD = -lpthread /home/me/projectA/lib/libdataM.a 来替换 AM_LDFLAGS= -lpthread -L/home/me/projectA/lib 也是同样的问题……


我的问题是:在这种情况下怎样设置头文件和库文件的路径,也就是怎样写Makefile.am文件?在网上找了很久也没找到解决方法。 多谢了。
头像
wzssyqa
帖子: 4010
注册时间: 2008-04-07 17:36
来自: 泰安人在阜新
送出感谢: 0
接收感谢: 0

Re: 关于automake工具的使用:使用了第三方的库和头文件,怎样写makefile.am文件

#2

帖子 wzssyqa » 2010-09-09 22:52

既然要这样 #include <pro/dataM.h> 用

就要这样写
INCLUDES= -I/home/me/projectA/include/

上边和下边,这两个,只能有一个带 pro

因为 #include 中,就是相对于 -I 的 相对路径

两个地方都带了 pro,当然就找不到了
freshguy
帖子: 12
注册时间: 2010-08-25 20:36
送出感谢: 0
接收感谢: 0

Re: 关于automake工具的使用:使用了第三方的库和头文件,怎样写makefile.am文件

#3

帖子 freshguy » 2010-09-10 0:53

wzssyqa 写了:既然要这样 #include <pro/dataM.h> 用

就要这样写
INCLUDES= -I/home/me/projectA/include/

上边和下边,这两个,只能有一个带 pro

因为 #include 中,就是相对于 -I 的 相对路径

两个地方都带了 pro,当然就找不到了
嗯 谢谢 就是犯了这个错误;
引用库文件(.a文件)在我在上面的Makefile.am中写的那个不行,会报很多的“undefined reference to ”函数,当然是调用的库里面的函数。
虽然改成了hpMain_LDADD = -lpthread /home/me/projectA/lib/libdataM.a 就可以了,但是不是很清楚原因……
回复

回到 “C/C++/Java”