在Linux中,通过编写Makefile.am文件并使用autoscan和automake工具,可以实现由Makefile.am自动生成Makefile。
在Linux中,我们可以使用autoscan
和automake
工具来自动生成Makefile
,这两个工具是GNU Make项目的一部分,可以帮助我们简化Makefile的编写过程,下面我们将详细介绍如何使用autoscan
和automake
由Makefile.am
自动生成Makefile
。
了解autoscan和automake
1、autoscan:autoscan
是一个用于扫描源文件并根据其扩展名自动添加目标到Makefile中的工具,它会查找所有以.c
, .cpp
, .cxx
, .m
, .mm
等扩展名的源文件,并为它们添加相应的目标,这样,我们就不需要手动为每个源文件添加目标了。
2、automake:automake
是一个用于从Makefile.am
文件生成各种构建系统所需的文件(如Makefile
, configure.ac
, config.h.in
等)的工具,它可以根据Makefile.am
中的内容自动生成相应的文件,从而简化了构建系统的配置过程。
使用autoscan和automake生成Makefile
要使用autoscan
和automake
生成Makefile,我们需要遵循以下步骤:
1、确保已经安装了automake
和libtool
工具包,如果没有安装,可以使用以下命令进行安装:
“`bash
sudo apt-get install automake libtool
“`
2、在项目的根目录下创建一个名为Makefile.am
的文件,这个文件用于描述项目的构建规则,我们可以在其中添加以下内容:
“`makefile
Makefile.am
bin_PROGRAMS = my_program
my_program_SOURCES = main.c foo.c bar.c
“`
这里,我们定义了一个名为my_program
的目标,它依赖于三个源文件:main.c
, foo.c
, bar.c
。
3、在项目的根目录下运行以下命令,让automake
根据Makefile.am
生成相应的文件:
“`bash
autoreconf –install –force
“`
4、现在,我们可以在项目的根目录下找到一个名为configure.ac
的文件,这个文件包含了构建系统所需的信息,我们可以使用文本编辑器打开这个文件进行编辑,我们可以在其中添加以下内容:
“`bash
AC_INIT([MyProject], [1.0], [myemail@example.com])
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
AC_PROG_CC
AC_CONFIG_FILES([Makefile])
AC_OUTPUT([Makefile Makefile-tv])
“`
5、在项目的根目录下运行以下命令,根据configure.ac
和Makefile.am
生成最终的Makefile
:
“`bash
automake –add-missing –copy –gnu –force-missing –include-deps –ifdef-native GNU Makefile Makefile-tv
“`
6、现在,我们可以查看生成的Makefile
,可以看到它已经根据我们的描述进行了自动生成。
“`makefile
Makefile generated by ‘autogen’ based on ‘Makefile.am’ using ‘autoreconf’.
CC = g++
LD = g++ $(LIBRARIES)
TARGET = my_program
VERSION = 1.0a1
DEPENDENCIES = foo bar main.o $(OBJEXT) $(LIBRARIES)
SOURCES = main.o foo.o bar.o $(wildcard *.o) $(SOURCES) $(OBJECTS) $(INCLUDES) $(HEADERS) $(SOURCES:%=.d) $(DATA) $(MANPAGES) $(INFOPAGES) $(TOPLEVELDIR)$(EXEEXT) $(top_srcdir)/my_program$(EXEEXT) $(top_srcdir)/my_program$(EXEEXT).dll $(top_srcdir)/my_program$(EXEEXT).so $(top_srcdir)/my_program$(EXEEXT).exe $(top_srcdir)/my_program$(EXEEXT).pdb $(top_srcdir)/my_program$(EXEEXT).exp $(top_srcdir)/my_program$(EXEEXT).ilk $(top_srcdir)/my_program$(EXEEXT).pdb $(top_srcdir)/my_program$(EXEEXT).exp $(top_srcdir)/my_program$(EXEEXT).ilk $(top_srcdir)/my_program$(EXEEXT).pdb $(top_srcdir)/my_program$(EXEEXT).exp $(top_srcdir)/my_program$(EXEEXT).ilk $(top_srcdir)/my_program$(EXEEXT).pdb $(top_srcdir)/my_program$(EXEEXT).exp $(top_srcdir)/my_program$(EXEEXT).ilk $(top_srcdir)/my_program$(EXEEXT).pdb $(top_srcdir)/my_program$(EXEEXT).exp $(top_srcdir)/my_program$(EXEEXT).ilk $(top_srcdir)/my_program$(EXEEXT).pdb $(top_srcdir)/my_program$(EXEEXT).exp $(top_srcdir)/my_program$(EXEEXT).ilk $(top_srcdir)/my_program$(EXEEXT).pdb $(top_srcdir)/my_program$(EXEEXT).exp $(top_srcdir)/my_program$(EXEEXT).ilk $(top_srcdir)/my_program$(EXEEXT).pdb $(top_srcdir)/my_program$(EXEEXT).exp $(top
本文来自投稿,不代表重蔚自留地立场,如若转载,请注明出处https://www.cwhello.com/474531.html
如有侵犯您的合法权益请发邮件951076433@qq.com联系删除