我有一个适中的C++项目。我想用autotools来管理它,但是发现使用复杂。
什么时候需要使用autotools?有没有(简单的)替代方案?
我想使用autotools的主要原因是它完整支持make install
。有没有更简单的替代方案?
最好是Eclipse CDT支持的某种工具。
对于 make install
支持,您只需要使用 automake
。而一个简单的 Makefile.am
文件很容易制作:
LIBS += -lsome-lib -lsome_other_lib
bin_PROGRAMS = hello
noinst_HEADERS = some.h header.h files.h
hello_SOURCES = hello.c some.c other.c source.c file.c
就是这样了。
autoconf
工具在你想要让程序更加跨平台时非常有用。你可以编写一个简单的脚本来测试你使用的系统头文件和系统库是否存在。如果未找到,你可以报错或者使用你包中提供的副本。
noinst_HEADERS
,最好将头文件列在hello_SOURCES
中。 - Brett Hale对于只包含基本部分(无需依赖项,无需安装)的小型项目,包括不超过3个源代码文件,应编写Makefile:
.PHONY: all clean
all: program
clean:
rm -f *.o
program: sourceA.o sourceB.o
$(CXX) -o $@ $^ $(LDFLAGS)
AC_CHECK_LIB(foobar, function_to_check_linking)
- 这会查找名为 foobar 的库,并将其放入 $LIBS
环境变量中。是的,检测库是一个重要的常见任务;如果你的工具不认为这是一项一流的用例,请放弃它。(使用 PKG_CHECK_MODULES 更方便。)
在 ./configure
过程中的每个操作都会记录在 config.log
中,因此您可以实际上找出出了什么问题。对于大多数其他工具,最好的情况只能得到“Boost_dir-NOTFOUND”。
已经内置了 make install
、make uninstall
(你是说,你的工具可以把东西放到我的系统上,但不能删除它们?)、make check
(如果指定了 test_
程序)、make dist-gzip
(将源文件打包成 tar.gz),make distcheck
(创建一个 tar.gz 并确保一切构建正确且所有测试都通过)。更好的是,它与 checkinstall
配合得很好,因此您可以从中创建和分发 .rpms 和 .debs。
如果需要,您可以在 automake Makefile 中混合使用传统的 Makefile 规则。
Autotools 文件与源文件一样受到跟踪,因此如果需要,可以通过简单地调用 make
来再次生成辅助脚本和 Makefiles。
是的,学习它“困难”,但在我看来,这不比学习 CMAKE/SCons 中所有特定的宏/函数调用更难。对于项目的初始 Makefile.am
只是一个分配给变量的文件列表,而初始的 configure.ac
可以通过 autoscan
生成;即使对于更琐碎的项目,我也觉得这很方便。
我所知道的最好的学习资料是 autobook,但不幸的是它已经过时了(autoconf 会抱怨使用了弃用的宏)。
您可以挑选并选择想要使用的autotools部分。很多项目只使用autoconf
,这是生成configure
脚本的autotools部分。如果您只想生成一个Makefile
,其中包含用户可配置的install
目标,那么这可能就是您需要的全部内容。
我不确定这个答案是否离题太远,但我会考虑使用scons。它需要一些时间来启动,但可以自动完成许多手工制作的make操作。