我正在接管一个项目,我在subversion存储库中看到一些属于libtool和automake分发的文件,例如config.guess,depcomp或ltmain.sh.我认为这是完全错误的,因为当我检查时,我应该在我的机器上安装autotools并执行autoreconf.
你怎么看 ?我错过了在存储库中存储这些文件的意义吗?
我目前正在开发一个使用模板相当广泛的项目,并在实例化过程中遇到内存限制。我已将实例化为许多非常简单的文件,这些文件都是仅包含包含的三行文件。
我让这些由 Makefile.am 中的规则生成。现在我有一个很长的文件列表,应该在我的 Makefile 中生成,并且想用类似 foreach 的表达式重构这个列表。更具体地说:我有一条线
libfoo_la_SOURCES = a_0.cpp a_1.cpp ... b_0.cpp b_1.cpp ... c_0.cpp c_1.cpp ...
Run Code Online (Sandbox Code Playgroud)
可以更简洁地表示为
libfoo_la_SOURCES = $(foreach i,a b ...,$(foreach j,0 1 ...,$i_$j.cpp))
Run Code Online (Sandbox Code Playgroud)
然而,第二个构造不仅被 automake 警告,而且不起作用:以这种方式给出的文件既没有编译也没有清理。
我当前的解决方法是通过 shell 脚本生成此文件列表。
任何想法如何实现这个迭代?
我正在尝试将 GNU AutoTools 用于我的 C++ 项目。我编写了configure.ac、makefile.am等。我有一些程序在执行过程中使用的文件,例如模板文件、XML模式等。因此,我沿着可执行文件安装/复制这些文件,为此我使用类似的文件:
abcdir = $(bindir)/../data/abc/
abc_DATA = ../data/knowledge/abc.cc
Run Code Online (Sandbox Code Playgroud)
现在它正确复制了文件,我的程序安装结构如下所示:
<installation_dir>/bin/<executableFile>
<installation_dir>/data/abc/abc.cc
Run Code Online (Sandbox Code Playgroud)
现在的问题是,在源代码中我实际上使用了这些文件(abc.cc 等),为此我需要这些文件所在的路径来打开它们。一种解决方案是定义(使用 AC_DEFINE)一些变量,例如 _ABC_PATH_ ,它指向安装路径,但究竟如何做到这一点?或者有没有更好的方法可以做到这一点。例如,在源代码中,我做了类似的事情:
...
ifstream input(<path-to-abc-folder> + "abc.cc"); // how to find <path-to-abc-folder>?
..
Run Code Online (Sandbox Code Playgroud) 错误信息如下:
./libtool: line 1129: X-I.: command not found
./libtool: line 1129: X-DLT_CONFIG_H=<config.h>: command not found
./libtool: line 1129: X-DLTDL: command not found
./libtool: line 1129: X-I.: command not found
./libtool: line 1129: X-I.: command not found
./libtool: line 1129: X-Ilibltdl: command not found
./libtool: line 1129: X-I./libltdl: No such file or directory
./libtool: line 1129: X-I./libltdl: No such file or directory
./libtool: line 1129: X-g: command not found
./libtool: line 1129: X-O2: command not found
./libtool: line 1129: X-MT: command …Run Code Online (Sandbox Code Playgroud) 在我使用 autoconf 和 automake 的项目中,我有两个可执行文件,比如“foo”和“bar”。假设“foo.c”看起来像
int main()
{
exec ("bar");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
即,“foo”使用“bar”。一旦我这样做就可以正常工作./configure && make && make install。但是,autoconf 提供了一个选项来转换程序名称。例如,我可以做./configure --program-suffix=-2.0. 然后“foo”和“bar”将被安装为
/usr/bin/foo-2.0
/usr/bin/bar-2.0
Run Code Online (Sandbox Code Playgroud)
在这种情况下,“foo”中对“bar”的引用将是不正确的,因为bar系统中将没有(应该是bar-2.0)。有什么办法可以让 autoconf/automake 自动调整这个引用?
我有一个文件 Makefile.am 我用来生成一个 Makefile。在生成的 Makefile 中,我想要这样的东西:
ifndef SOURCECODEPATH
SOURCECODEPATH := /home/root/source_code_path
endif
Run Code Online (Sandbox Code Playgroud)
看起来很简单,有人知道我该怎么做吗?
automake conditional makefile autotools environment-variables
我试图在Automake中添加一些编译选项,但没有一种方法可行.
这是我的configure.ac:
AC_INIT(...)
AC_PREREQ([2.59])
AC_CONFIG_AUX_DIR([build-aux])
AM_INIT_AUTOMAKE([1.10 foreign -Wall no-define])
AC_PROG_CXX
AC_PROG_LIBTOOL
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([Makefile src/Makefile test/Makefile])
AC_LANG(C++)
AC_OUTPUT
Run Code Online (Sandbox Code Playgroud)
我有父母Makefile.am(在顶级目录):
#AM_CFLAGS = ... # doesn't work
AUTOMAKE_OPTIONS = subdir-objects
ACLOCAL_AMFLAGS = ${ACLOCAL_FLAGS}
SUBDIRS = src test
dist_noinst_SCRIPTS = autogen.sh
Run Code Online (Sandbox Code Playgroud)
和Makefile.am每个源目录; src/Makefile:
include_HEADERS = ...
lib_LIBRARIES = ...
Run Code Online (Sandbox Code Playgroud)
并且test/Makefile:
#AM_CFLAGS = ... # doesn't work
bin_PROGRAMS = myprog #test
myprog_SOURCES = ...
myprog_LDADD = ../src/libmylib.a
#myprog_CFLAGS = ... # Doesn't work either
Run Code Online (Sandbox Code Playgroud)
我尝试取消注释评论行的所有组合,即:
现在我正在尝试在我的 Mac 上构建 Automake,到目前为止一切都进展顺利。我构建了 Autoconf 和 m4,没有任何问题的包(而不是 git pulls)。然后我到了 Automake,这就是事情分崩离析的地方:
checking whether autoconf is installed... yes
checking whether autoconf works... yes
checking whether autoconf is recent enough... no
configure: error: Autoconf 2.65 or better is required.
Run Code Online (Sandbox Code Playgroud)
如果我构建并安装 autoconf 2.68,问题仍然存在。我在这个上缺少某种技巧吗?
我正在尝试从http://www.irisa.fr/metiss/guig/spro建立SPRO
他们使用Automake 1.6.2生成makefile.
我的问题是,当我尝试制作项目时,我收到错误
"undefined reference to 'sin' " 等等
这是错误图像

此错误是由于数学库未包含在-lmflag中但-lm存在于makefile.am
这是我的 makefile.am
AUTOMAKE_OPTIONS = 1.4 foreign
ACLOCAL_AMFLAGS = -I auxdir
LDADD = -lm -L. -lspro @sphere_lib@
INCLUDES = @sphere_include@
include_HEADERS = spro.h
lib_LIBRARIES = libspro.a
noinst_HEADERS = getopt.h
libspro_a_SOURCES = system.h spro.h sig.c spf.c header.c misc.c lpc.c convert.c fft.c
bin_PROGRAMS = scopy slpc slpcep sfbank sfbcep
noinst_PROGRAMS = scompare
scopy_SOURCES = scopy.c getopt.c getopt1.c
scopy_DEPENDENCIES = libspro.a
slpc_SOURCES = …Run Code Online (Sandbox Code Playgroud) 在automake的Makefile.am中,程序的源代码如下所示:
bin_PROGRAMS = os345v1
os345v1_SOURCES = os345.c os345interrupts.c os345semaphores.c
而不是指定单个文件,而是如何在特定目录和子目录中添加所有c文件?