有没有办法用automake在每个文件的基础上设置标志?
特别是,如果我有一个c ++项目并想用-WAll编译所有文件,除了我要禁用特定警告的文件,我该怎么办?
我尝试过类似的东西:
CXXFLAGS = -WAll ...
bin_PROGRAMS = test
test_SOURCES = main.cpp utility.cpp
utility_o_CXXFLAGS = $(CXXFLAGS) -Wno-unused-value
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
编辑:删除了对automake手册的引用,这实际上是误导(感谢Douglas Leeder).
我正在尝试在RedHat Linux机器上构建ZooKeeper.(究竟ZooKeeper可能并不重要:-)
当我按照包装说明进行操作时,我得到:
$ autoreconf -if
aclocal:configure.ac:33: warning: macro `AM_PATH_CPPUNIT' not found in library
aclocal:configure.ac:33: warning: macro `AM_PATH_CPPUNIT' not found in library
configure.ac:33: error: possibly undefined macro: AM_PATH_CPPUNIT
If this token and others are legitimate, please use m4_pattern_allow.
See the Autoconf documentation.
autoreconf: /usr/bin/autoconf failed with exit status: 1
Run Code Online (Sandbox Code Playgroud)
我无法在标准位置安装CPPPUNIT.(没有root权限,系统团队的策略与标准配置"无偏差".)
我通过AM_PATH_CPPUNI在configure.ac文件中注释掉对T 的引用来解决这个问题
,但我真正想做的是在我的个人目录中安装CPPPUNIT并指向它,但是我没有做太多在弄清楚如何告诉autoconf/auotmake系统在非标准的地方寻找它的进展.任何人都有任何关于如何做到这一点的提示?
我有一个autotools项目:automake,autoconf.
我想禁止make从改造的文件configure,Makefile.in等等; 只是为了编译工作.
有些文件是手工编辑的,我知道我不应该这样做.(或者项目已从CVS更新,所有生成的文件都存储在CVS中).但目前我没有安装正确版本的autotools.
必须修改此文件的时间(必须更新/更旧):
aclocal.m4
configure.in
confdb/ax_prefix_config_h.m4
Makefile.am
Makefile.in
Makefile
configure
config.status
Run Code Online (Sandbox Code Playgroud)
或者:touch我必须执行哪些命令才能实现目标?
我手上有一个大项目(主),它被分成几个组件(liba,b,c,d),以便于构建和维护.构建整个包时,必须按顺序构建所有子组件,其中一些组件相互依赖.
更明确地说,liba是b,c和d的先决条件,并且配置脚本会检查liba的存在.在构建b分发时,必须进行此检查以提供用户友好的错误消息.但是,在构建主包及其所有子包时,liba将构建为子目标.因此,当在主套件上运行configure时,尚未安装liba,并且b中的liba检查失败.
我可以通过将--with-liba = internal或类似的标志传递给b的configure脚本来纠正这个问题; 但是,我没有找到关于autoconf这种标志传递的任何文档.暂且,我已经在主长很长的定制生成文件,不只是一样与子目录的autoconf/automake的,但重新排序依赖性的位,而不是(配置利巴)=>使得(配置B)=>(建liba)=>(构建b),顺序是(configure liba)=>(build liba)=>(install liba)=>(configure b)=>(build b).
知道如何用标准的autoconf/automake子目录重构这个吗?
我是一个相当新的C++程序员.我使用SDL库做了一个非常简单的游戏.我的游戏自然会使用一些图像,声音和字体.我想要分发包,用户可以配置&& make.这并不是说这个简单的游戏值得分发,但我想了解autoconf和automake的工作原理.我搜索了互联网上的例子,但我找到的教程只显示了一个简单的helloworld程序的安装.他们既没有谈论数据文件的安装,也没有讨论如何检查某些库是否存在,以便我可以在编译时链接它们.而且,我的程序应该知道每个文件的安装位置,以便它可以加载它们.我已经深入研究了automake和autoconf手册,但它们更像是参考资料,而不是新手的资源.任何人都可以简单地解释这个概念,或者引导我到一些我可以阅读它们的地方.
我需要交叉编译一些C/C++库.该库依赖于几个C/C++库.其中一些库反过来依赖于其他库.所有库都附带配置脚本.我知道如何在主机系统上编译和安装库 - 在我需要的lib之前安装依赖项.显然,这在交叉编译时不起作用.任何提示都表示赞赏.谢谢.
我正在尝试为gcc 4.6启用c ++ 11; 我正在使用autconf,我在configure.ac文件中添加了以下内容
AC_PREREQ(2.61)
AC_INIT(SOLARCORE, 1.0.0, BUG-REPORT-ADDRESS)
AM_INIT_AUTOMAKE([1.10 no-define foreign])
AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_SRCDIR([src/threading/node.h])
AC_CONFIG_HEADER([config.h])
AC_OUTPUT([Makefile src/threading/Makefile])
# Checks for programs.
AC_PROG_CXX
AC_PROG_CC
#AC_LANG_PUSH([C++])
AC_LANG([C++])
AC_GNU_SOURCE
AX_CXX_COMPILE_STDCXX_11(,[mandatory])
CXXFLAGS='-Wall -std=gnu++0x'
AC_TYPE_SIZE_T
AC_OUTPUT
Run Code Online (Sandbox Code Playgroud)
我收到了以下错误
./configure:第4949行:意外标记附近的语法错误,mandatory'
./configure: line 4949:AX_CXX_COMPILE_STDCXX_11(,必填)'
我也试过AX_CXX_COMPILE_STDCXX_11([ext],[强制])
我想启用C++ 11以便我可以使用它.我尝试没有AX_CXX_COMPILE_STDCXX_11,并且我的Makefile中只有CXXFLAGS,但它无法正常工作.所以请帮忙.谢谢.
找到答案:最新版本的AX_CXX_COMPILE_STDCXX_11不需要参数.
我正在尝试libbsd在 Ubuntu 13.04 上从源代码进行编译。我正在使用工具链进行交叉编译,但 automake 在本地计算机上。我已经aclocal-1.13在 PATH 和所有内容中,但仍然收到此错误。我尝试过查找它们,但找不到任何线索。这里发生了什么?
<...>
config.status: executing libtool commands
CDPATH="${ZSH_VERSION+.}:" && cd .. && /bin/bash /home/me/libbsd/build-aux/missing aclocal-1.13 -I m4
error: cannot get project version.
configure.ac:9: error: AC_INIT should be called with package and version arguments
/usr/share/aclocal-1.13/init.m4:23: AM_INIT_AUTOMAKE is expanded from...
configure.ac:9: the top level
autom4te: /usr/bin/m4 failed with exit status: 1
aclocal-1.13: error: echo failed with exit status: 1
make: *** [../aclocal.m4] Error 1
Run Code Online (Sandbox Code Playgroud)
任何帮助是极大的赞赏。
我正在尝试使用autotools构建一个项目并收到此错误:
$ autoreconf --install
automake: warnings are treated as errors
src/Makefile.am:3: warning: variable 'librombrowser_a_LDFLAGS' is defined but no program or
src/Makefile.am:3: library has 'librombrowser_a' as canonical name (possible typo)
autoreconf: automake failed with exit status: 1
Run Code Online (Sandbox Code Playgroud)
src/Makefile.am如下:
noinst_LIBRARIES = librombrowser.a
librombrowser_a_CPPFLAGS = $(GTK_CFLAGS)
librombrowser_a_LDFLAGS = $(GTK_LIBS)
librombrowser_a_SOURCES = \
rombrowser-app.c \
rombrowser-app.h \
rombrowser-cmds-file.c \
rombrowser-cmds-help.c \
rombrowser-cmds.h \
rombrowser-dirs.c \
rombrowser-dirs.h \
rombrowser-settings.c \
rombrowser-settings.h
bin_PROGRAMS = rombrowser
rombrowser_SOURCES = rombrowser.c
rombrowser_LDADD = librombrowser
Run Code Online (Sandbox Code Playgroud)
我没有看到什么是错的.
我有几个使用automake构建的项目(让我们称之为lib1和lib2).lib2依赖于lib1作为库,我在CentOS上遇到pkg-config默认值的问题.理想情况下,我希望用户不必设置任何环境变量来正确安装所有内容.
现在,它只是假设$ {PREFIX}/lib/pkgconfig作为我的.pc文件的目的地,但在CentOS 7上,$ {PREFIX}的默认值是/ usr/local,但pkgconfig默认只查看/ usr/share/pkgconfig和/ usr/lib64/pkgconfig.因此,lib2无法找到带有pkg-config的lib1,并且配置脚本会爆炸.
所以,问题是,我的lib1中的"make install"如何正确检测安装pkg-config文件的目录?