用于创建库和使用它的程序的 automake
Posted
技术标签:
【中文标题】用于创建库和使用它的程序的 automake【英文标题】:automake for creating a lib and program using it 【发布时间】:2010-08-17 09:40:52 【问题描述】:我正在尝试开发一个程序,该程序使用在同一项目中完成的另一个内部库。
我想链接两者。该库存储在 ./lib/mylib 下并成功编译,并创建了一个 mylib.a。问题是我需要在 INCLUDE 搜索中包含 ./lib/mylib 目录,并将程序与库链接。
是否有任何自动定义的变量,或者我必须像下面的 Makefile.am 那样自己做?
SUBDIRS = lib .
# set the include path found by configure
INCLUDES = $(all_includes) -Ilib/mylib
bin_PROGRAMS = myprogram
myprogram_SOURCES = main.c
myprogram_CPPFLAGS = $(libmylib_CFLAGS) $(AM_CFLAGS) $(CFLAGS)
nfc_network_config_LDADD =$(LIB_MYLIB)
【问题讨论】:
【参考方案1】:您的Makefile
可能看起来像这样。
SUBDIRS = lib .
bin_PROGRAMS = myprogram
myprogram_SOURCES = main.c
myprogram_CPPFLAGS = -Ilib/mylib $(AM_CPPFLAGS)
myprogram_LDADD = lib/mylib/mylib.a
请注意,*_CPPFLAGS
通常不应与*_CFLAGS
混合使用,并且始终使用$(CFLAGS)
和$(CPPFLAGS)
变量(它们是用户变量),因此您不必提及它们。此外,INCLUDES
是一个过时的变量(您应该改用*_CPPFLAGS
),如果您使用-Wall
选项运行它,automake 会发出警告。
【讨论】:
但如果您使用 AM_PROG_CC_C_O,则 AM_CPPFLAGS 不兼容。还是被弃用了? 为什么说不兼容?我在所有项目中都使用 subdir-objects 和 AM_CPPFLAGS。以上是关于用于创建库和使用它的程序的 automake的主要内容,如果未能解决你的问题,请参考以下文章
10个基于web的JavaScript最优秀的应用程序库和框架