我正在编写自己的单元测试库(使用autoconf,automake和libtool)以更好地满足我的需求(我不需要超大量的功能,只需要测试运行器和断言).我已经达到了似乎可以使用的程度.
当然,它使用config.h来确定要包含的标头.问题是,我不知道在哪里的config.h应该去,因为它往往会与其他项目的config.h中,以及事实,即它是依赖于架构容易冲突.
我的方法应该用于安装此标头?(所有其他标题都需要它)
我一直在谷歌搜索和安装库一段时间,但我无法用autoconf解决这个问题.
我已下载了一个我想编译的程序,做了一些更改,需要分别运行autogen.sh和./configure并make install.
但是,当我尝试运行autogen.sh时,我收到以下错误;
configure.ac:225: error: possibly undefined macro: AM_PATH_GTK_2_0
If this token and others are legitimate, please use m4_pattern_allow.
See the Autoconf documentation.
Run Code Online (Sandbox Code Playgroud)
所以我继续,下载autoconf-2.68,automake-1.11,m4-1.4.16,并尝试了sudo apt-get install libgtk2.0-dev,其中没有一个改变了结果.当我尝试aclocal,我再次得到错误
configure.ac:225: warning: macro `AM_PATH_GTK_2_0' not found in library
Run Code Online (Sandbox Code Playgroud)
我现在卡住了,无处可去.所以我很高兴有任何建议.
我有几个C++类,我想使用autotools和libtool将它们编译成一个共享库.这些是我的configure.ac和Makefile.am文件:
configure.ac:
AC_PREREQ(2.67)
AC_INIT(somelib.so, 1.0, someone@somewhere.com)
AC_LANG(C++)
AM_INIT_AUTOMAKE(somelib, 1.0)
LT_INIT([disable-static])
AM_DISABLE_STATIC
AM_PROG_LIBTOOL
AC_LIBTOOL_DLOPEN
AC_PROG_LIBTOOL
AC_CONFIG_SRCDIR([Logger.cpp])
AC_CONFIG_HEADER([config.h])
# Checks for programs.
AC_PROG_CXX
AC_PROG_CC
AC_SUBST(LIBTOOL_DEPS)
AC_LTDL_DLLIB
AC_PROG_RANLIB
AC_SUBST(LIBTOOL_DEPS)
AC_LTDL_DLLIB
# Checks for libraries.
# Checks for header files.
AC_HEADER_STDC
AC_CHECK_HEADERS([cstring unistd.h pthread.h])
# Checks for typedefs, structures, and compiler characteristics.
AC_HEADER_STDBOOL
AC_C_CONST
AC_C_INLINE
AC_TYPE_SIZE_T
# Checks for library functions.
AC_FUNC_MALLOC
AC_FUNC_REALLOC
AC_TYPE_SIGNAL
AC_CHECK_FUNCS([mkdir strdup dup2])
AC_CHECK_LIB(pthread, pthread_create, [], [ echo "ERROR!: libpthread not found!"; exit -1], [])
AC_CHECK_LIB(xml2, htmlReadMemory, [], [ echo …Run Code Online (Sandbox Code Playgroud) 我有选项subdir-objects设置configure.ac:
AM_INIT_AUTOMAKE([subdir-objects])
Run Code Online (Sandbox Code Playgroud)
有没有可能有条件地禁用它特别是Makefiles(Makefile.am)?
谢谢.
我正在开发一个目前用C语言编写的项目,但我计划在ASM中为至少两个平台(x86_64和arm)编写一些函数.所以我可能有一些源文件:
我喜欢它,以便配置脚本在可能的情况下选择.s文件.c文件.所以建立在arm上将是one.s,two.c,three.c等.
使用Automake很难或不可能做到这一点.但如果我放弃Automake,我将不得不追踪自己的依赖(呃).
最好的方法是什么?
Automake要求我的项目的源目录中存在以下"标准"文件:
显然,这些文件都不是构建程序所必需的,但Automake拒绝在没有它们的情况下运行.我知道--add-missing将生成样板文件的标志,但我宁愿根本没有文件.
有没有办法强制Automake运行并忽略丢失的文件而不生成它们?
使用autotools创建以下库:
Makefile.am:
lib_LTLIBRARIES = libandi.la
libandi_la_SOURCES = $(SMILE_SOURCES)
libandi_la_CPPFLAGS = $(SMILE_CPPFLAGS)
libandi_la_LIBADD = $(SMILE_LIBS)
libandi_la_LDFLAGS = -no-undefined
///////////////////////////////////////////////////////////////////////////
/////////This will be gone since I want to use libandi in android project
///////////////////////////////////////////////////////////////////////////
bin_PROGRAMS = AndiExtract
AndiExtract_SOURCES = src/AndiExtract.cpp
AndiExtract_CPPFLAGS = $(Andi_CPPFLAGS)
AndiExtract_LDADD = $(Andi_LIBS) -libandi -->I need this linker in android
//////////////////////////
///////////////////////////////////////////////////////////////////////////
Run Code Online (Sandbox Code Playgroud)
我可以用android ndk编译它,所以这不是问题.
但是我如何链接到libtool库libandi.la?在android.mk文件中?它甚至可能吗?我在网上搜索时找不到答案.谢谢.
当使用autoreconf与automake与libtool构建和安装我的申请,我总是警告" 的libtool:警告:xxx.la尚未安装在/用户/ local/lib目录 "和" libtool的:警告:请记住运行"的libtool --finish/usr/local/lib ".我已经尝试了很多方法,例如清理项目,并使用make clean重新配置,但仍然无法摆脱警告.这是我尝试过的:
./configure
make clean
make
make install prefix=~/Software/
Run Code Online (Sandbox Code Playgroud)
这里是我的一部分configure.ac,涉及到automake和libtool.
AM_INIT_AUTOMAKE([subdir-objects -Wall -Werror])
LT_INIT([dlopen])
Run Code Online (Sandbox Code Playgroud)
为什么会发出这些警告,我该如何摆脱它们呢?
我正在尝试使用不同的构建系统构建库,但库中的config.h文件需要在运行autoconf生成的配置脚本后生成的头文件.
这是我尝试生成所需config.h文件的一系列步骤
autoreconf -ivf
./configure --disable-dependency-tracking
Run Code Online (Sandbox Code Playgroud)
构建系统保证gflags链接库,并且标头将在预处理时可用.但configure脚本退出时出现以下错误
configure: error: Please install google-gflags library
Run Code Online (Sandbox Code Playgroud)
有什么方法可以获得所需库的列表(例如gflags),然后将参数传递给configure脚本,告诉它假设该库存在于系统中?我经历了两者的帮助输出,autoreconf并且./configure无法解决这个问题.
很抱歉有很长的解释和问题.我很新autoconf,等等.
谁能告诉我是否有办法向 Makefile.am 插入条件块,以便将其进一步传递给由 autotools 创建的 Makfile?
下面是一个例子:
ifeq "$(SOMEVAR)" ""
SOMEVAR="default_value"
endif
Run Code Online (Sandbox Code Playgroud)
这似乎是做有条件的事情的常见 Makefile 方式。Automake 切断 endif 行并最终失败并显示如下消息:
Makefile:390: *缺少‘endif’。停止。
有什么想法吗?