我正在尝试构建的项目具有默认标志
CFLAGS = -Wall -g -O2
CXXFLAGS = -g -O2
Run Code Online (Sandbox Code Playgroud)
我需要在-w
这两个变量上附加一个标志(删除:'将所有警告视为错误')
我有办法解决,给
make 'CFLAGS=-Wall -g -O2 -w'; 'CXXFLAGS=-g -O2 -w'
Run Code Online (Sandbox Code Playgroud)
要么
运行./configure
并静态修改Makefile
但我想追加我的选择与现有的选项运行时configure
或make
帖子 将一个CFLAG(例如-std = gnu99)添加到autotools项目中的 位置可以方便地使用宏来实现此目的.
我目前正在学习如何使用autoconf
/ automake
toolchain.我似乎对这里的工作流程有一个大致的了解 - 基本上你有一个configure.ac
生成可执行configure
文件的脚本.configure
然后由最终用户执行生成的脚本以生成Makefile
s,因此可以构建/安装程序.
因此,典型最终用户的安装基本上是:
./configure
make
make install
make clean
Run Code Online (Sandbox Code Playgroud)
好的,现在我在这里困惑:
作为开发人员,我注意到自动生成的配置脚本有时不会运行,并且会出错:
config.status: error: cannot find input file: `somedir/Makefile.in'
Run Code Online (Sandbox Code Playgroud)
这混淆了我,因为我认为配置脚本应该产生的Makefile.in
.所以谷歌搜索一些答案,我发现这可以用autogen.sh
脚本修复,这基本上"重置"了autoconf
环境的状态.一个典型的autogen.sh
脚本将是这样的:
aclocal \
&& automake --add-missing \
&& autoconf
Run Code Online (Sandbox Code Playgroud)
好的.但作为终身用户,我终生下载了无数的tarball,我从来没有使用过autogen.sh
脚本.我所做的只是解压缩tarball,并执行通常的configure/make/make install/make clean例程.
但作为一个现在正在使用 的开发人员,除非你先运行,否则autoconf
它似乎configure
并没有真正运行autogen.sh
.所以我发现这非常令人困惑,因为我认为最终用户不应该运行autogen.sh
.
那么为什么我必须先运行autogen.sh
- 才能找到配置脚本Makefile.in
?为什么configure脚本不能简单地生成它?
我已经看到了我配置的不同的东西.我有什么区别?仅使用一个是值得注意的吗?或者使用哪一个无关紧要?
我搜索了这个问题的答案,但找不到任何好处.也许他们已经老了,事情发生了变化,所以我再问一次.
我有一个目录结构:
我的项目
SRC
箱子
我想要的是,当我在根目录中制作时,二进制文件放在./bin中,而不是混乱./src.但是怎么样?
编辑:我正在使用C++.我的Makefile.am没什么特别的.只是bin_PROGRAM和_SOURCES变量.
当我运行make时,生成的二进制文件被放入./src.我只想把它们放在./bin中.
我正在尝试使用android-ndk-r5独立工具链和autotools编译库.在执行./configure时,它失败了:
$ ./configure --host=arm-linux-androideabi ...snip... checking host system type... Invalid configuration `arm-linux-androideabi': system `androideabi' not recognized configure: error: /bin/sh ./config.sub arm-linux-androideabi failed
显式设置CC和CXX也不起作用(configure表示使用--host).
NDK文档和各种在线资料似乎表明以这种方式使用独立工具链应该是可能的.这有什么不对?我该如何解决?(除了简单地放弃autoconf并回到Android.mk)
我想知道如何设置默认的编译器/链接器/等.标志,如果我使用Autoconf/Automake组合.
例如,如果我没有设置任何内容,则默认编译器标志为"-O2 -g".我可以用其他东西覆盖它,例如,如果我想调试:
./configure 'CXXFLAGS=-O0 -g'
Run Code Online (Sandbox Code Playgroud)
但我发现默认配置很愚蠢,因为如果我启用优化,调试将变得不可能.所以默认标志应该是"-O2"或"-O0 -g",如果我configure
没有参数运行.我该怎么做?
编辑:我尝试了以下解决方案:
progname_CXXFLAGS=whatever
Makefile.am.它不起作用,因为它将标志添加到默认标志而不是替换它们.CXXFLAGS=whatever
configure.ac.这有效,但后来我无法覆盖它.我从Autoconf Archive下载了一个宏,我想使用它.我需要在configure.ac文件中放置什么才能使用这个宏?
各种开发人员不鼓励使用PKG_CHECK_MODULES
(例如,在这个答案中),但就我所寻找的原因,没有明确,全面的解释其原因.所以,我问:
PKG_CHECK_MODULES
有害?我是一个人,今天第一次使用它.我发现它非常有用,特别是用于处理相当复杂的库集,例如GTK +,我拥有所有这些依赖项:
-I/usr/lib/i386-linux-gnu/gtk-2.0/include -I/usr/include/atk-1.0
-I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/pango-1.0
-I/usr/include/gio-unix-2.0/ -I/usr/include/glib-2.0
-I/usr/lib/i386-linux-gnu/glib-2.0/include -I/usr/include/pixman-1
-I/usr/include/freetype2 -I/usr/include/libpng12
-lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0
-lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lgmodule-2.0
-lgthread-2.0 -lrt -lglib-2.0
Run Code Online (Sandbox Code Playgroud) 我使用AX_CXX_COMPILE_STDCXX_0X
(可以查看autoconf-archive)来检查编译器的c ++ 11功能.它正确地确定了-std=c++0x
所需,但不添加它CXXFLAGS
.我看了一下宏源,它实际上检查了然后恢复了以前的标志.
我应该怎么做才能CXXFLAGS
编译c ++ 11源代码?
只是添加-std=c++0x
到AM_CXXFLAGS
不是很好的解决方案,因为我想在autoconf开发人员,而不是我在C++ 11模式下编译编译器的负担.
如何告诉'configure'文件使用指定版本的g ++进行编译?
谢谢.