我已经安装了mingw和msys mingw-get-setup.exe.我还安装了Autotools(autoconf,automake,m4,libtool)C:\/opt/autotools.
当我运行automake时,总会发生以下错误:
configure.ac:11: error: required file './ltmain.sh' not found
Run Code Online (Sandbox Code Playgroud)
如果我ltmain.sh从libtool的已安装树中复制,执行将正常完成.
如何在ltmain.sh不复制的情况下将automake配置为查找?
似乎有一些答案是那种,有点理智,但我不知道如何执行.我还没有找到一个全面的答案.
Google Test不应该是已安装的库,它应该与项目一起构建.(请参阅常见问题解答.)据我所知,这意味着Google Test库是我单元测试的依赖项,应该在我第一次在项目中运行"make check"时构建.这应该在某个目录中构建Google Test库.我不知道该怎么做.它提到了一些被弃用的autotools脚本,我不确定他们在谈论什么,或者如何正确地指出我的构建.
假设构建成功,我如何编写使用我的本地编译版Google Test运行测试的测试?我假设我在test目录中放了一堆Makefile.am命令.但他们是什么?什么是使用Google Test的单元测试的例子?
我有一个项目有几个源目录:
src/A
/B
/C
Run Code Online (Sandbox Code Playgroud)
在每个中,Makefile.am包含
AM_CXXFLAGS = -fPIC -Wall -Wextra
Run Code Online (Sandbox Code Playgroud)
如何避免在每个源文件夹中重复此操作?
我试图修改src/Makefile.am和configure.in,但没有成功.我以为我可以使用AC_PROG_CXX全局设置编译标志但是找不到关于如何使用这些宏的文档(你有指向这样的文档的指针吗?).
提前致谢
我有一个C项目在Linux中编译和运行.这是一个包含许多子目录的非常大的项目.在父目录中有文件Makefile.am和Makefile.in.
我试过运行make -f Makefile.am,并得到以下错误:
make: Nothing to be done for `Makefile.am'.
Run Code Online (Sandbox Code Playgroud)
这是什么意思?我如何完成任务?
当做AA GNU风格" 的./configure,make,并安装 " -与特定选项,标记,等...大家都知道,有时这可能是一个黑色的艺术..和什么工作的一个软件可不是为了任何其他......
现在,假设您已经成功构建了一些包XYZ.app,其中包含一些选项,如...
% ./configure --with-1=2 USFLAG="-3 four" OBSCURE_LIB=l/lib/doihave
继续使用它.大.稍后,您意识到您需要先前省略的编译时选项,或者您已经解决了依赖性问题等等...... 无论出于何种原因,您希望重新编译这个非常好的二进制文件.
现在...... 你怎么能"回忆"你传递给./configure的所有选项,逐字,以便使用那些SAME选项,同时可能增加或减少一些,这次呢?
我确信这些东西都埋在了所有那些config.xxxx或AClocal或Makefile.xx文件的某个地方,但对于我的生活,我还没有能够谷歌直接回答.
% file /usr/bin/$1 --> Mach-O 64-bit executable x86_64
% ld /usr/bin/$1 --> -macosx_version_min not specificed, assuming 10.6
% make -d --> * 20 pages of Makefile nonsense.... *
% ./config.log --> * shows some history, but nothing interesting. *
% ./config.status --> * does a strange sequence oddly similar to a "clean" *
% …Run Code Online (Sandbox Code Playgroud) 我正在使用autotools构建我的系统,主要由一个库组成.在64位Red Hat平台上,我需要能够生成一个能够在32位Red Hat平台上运行的库.
当我添加-m32到编译行时,一切都可以正常生成一个static(.a)库,但是一旦我尝试创建一个共享库,我就会得到这样的错误:
/usr/bin/ld: warning: i386:x86-64 architecture of input file `/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crti.o' is incompatible with i386 output
/usr/bin/ld: warning: i386:x86-64 architecture of input file `/usr/lib/gcc/x86_64-redhat-linux/4.1.2/crtbeginS.o' is incompatible with i386 output
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/crtbeginS.o: In function `__do_global_dtors_aux':
crtstuff.c:(.text+0x29): undefined reference to `__DTOR_END__'
collect2: ld returned 1 exit status'
Run Code Online (Sandbox Code Playgroud)
我可以看到的问题是,它包括64位对象文件出来的/ usr/lib64下,而不是正确的32位的了/ usr/lib目录的(他们有正常的),但我无法弄清楚如何要解决这个问题.
运行后,make distcheck我收到消息说我已经成功构建了包并准备好分发.如果我的解压tar.gz用tar -zxvf hello-0.2.tar.gz它成功地提取它的所有内容.但是,当我尝试在不同的机器中提取它们时,我得到:
tar: This does not look like a tar archive
tar: Skipping to next header
tar: Exiting with failure status due to previous errors
Run Code Online (Sandbox Code Playgroud)
奇怪的是它以前工作过.
在我正在尝试构建软件包的机器上,我已经更新了我automake 1.10.1, autoconf 2.61, and tar 1.20 to automake 1.11.1, autoconf 2.65, and tar 1.23的问题并且仍然存在同样的问题.
任何想法可能是什么问题?
如何在没有.la和.a库的情况下使用autotools/libtool构建和安装.so模块也安装到--prefix路径中?
目前我正在使用以下Makefile.am:
lib_LTLIBRARIES = libCurlDownloader.la
libCurlDownloader_la_SOURCES = Curl.cpp
libCurlDownloader_la_LDFLAGS = -module -avoid-version
Run Code Online (Sandbox Code Playgroud)
它有效,但除了libCurlDownloader.so之外,它还安装了libCurlDownloader.la和libCurlDownloader.a,这是不可取的.
更新#1
通过使用任何一个都可以使.a无法生成
./configure --disable-static
Run Code Online (Sandbox Code Playgroud)
要么
AC_ENABLE_SHARED(yes)
AC_ENABLE_STATIC(no)
Run Code Online (Sandbox Code Playgroud)
在configure.ac中
但是仍然存在如下问题:如何在安装.so时将.la安装到安装--prefix中.
更新#2
可以从安装--prefix中删除.la文件
install-exec-hook: find $(DESTDIR)$(libdir) -type f -name \*.la -delete
Run Code Online (Sandbox Code Playgroud) 我是Autotools的新手.根据我的理解,可以使用以下基本步骤使用Autotools构建软件:
autoreconf --install./configuremake但是,我注意到大多数开源软件包(在Linux上)不需要第1步.他们大部分时间只需要第2步和第3步来构建.它们似乎已经打包了Makefile.in.我想知道为什么?他们是手动编码Makefile.in,还是软件开发人员在创建软件包之前autoreconf用来生成Makefile.in?
谢谢.
我正在努力学习如何使用autotools,我似乎无法找到一个好的初学者友好的答案这个问题.autoconf和之间的区别是什么autoreconf.