用于创建库和使用它的程序的 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最优秀的应用程序库和框架

Xcode for iPhone 中静态库和动态库的区别

JAVA也可以用于图像的设计吗?

(转)HelloWorld CMake CMake中构建静态库与动态库及其使用

动态库和静态库的区别

sqlite-utils:用于构建SQLite数据库的Python库和命令行工具