makefile 和 configure 模板

第一次写makefile和configure, 记录下模板:

makefile:

SRCDIR = src
OBJDIR = obj

CC = gcc
SHARED = -shared
FPIC = -fPIC -c

H_OBJECT = $(SRCDIR)/hashtable.h $(SRCDIR)/murmur.h

MURMUR = -D__WITH_MURMUR 
CFLAGS    = -Wall -Wextra $(dbg)-DDEBUG -DTEST $(MURMUR)
LFLAGS    = -lrt -L. -lhashtable

hashtable-obj = $(OBJDIR)/hashtable.o $(OBJDIR)/murmur.o
test-obj = $(OBJDIR)/main.o

all: mk libhashtable.so test

$(OBJDIR)/%.o: $(SRCDIR)/%.c 
    $(CC) $(CFLAGS) $(FPIC) -o $@ $<

libhashtable.so: $(hashtable-obj)
    $(CC) $(CFLAGS) $^ $(SHARED) -rdynamic -fPIC -o $@

test: $(test-obj)
    $(CC) $(CFLAGS) $(LFLAGS) $< -o $@

without_murmur:
    $(MAKE) MURMUR = all

mk: 
    mkdir -p $(OBJDIR)

#install and uninstall
.PHONY: install
install: libhashtable.so
    mkdir -p $(PREFIX)/lib
    mkdir -p $(PREFIX)/include/hashtable
    cp $< $(PREFIX)/lib/libhashtable.so
    cp $(SRCDIR)/hashtable.h $(PREFIX)/include/hashtable
    cp $(SRCDIR)/murmur.h $(PREFIX)/include/hashtable
    cp $(SRCDIR)/hashfunc.h $(PREFIX)/include/hashtable

.PHONY: uninstall
uninstall:
    rm -f $(PREFIX)/lib/libhashtable.so
    rm -rf $(PREFIX)/include/hashtable

clean:
    rm -f $(OBJDIR)/*.o
    rm -f hashtable-test
    rm -f libhashtable.so
    rm -f test
    rm -rf obj

  

configure:

#!/bin/sh

if [[ -a Makefile ]]; then
echo "delete Makefile ..."
rm -f Makefile
fi

prefix=/usr/local
debugsym=false

for arg in "$@"; do
case "$arg" in
--prefix=*)
prefix=`echo $arg | sed 's/--prefix=//'`
;;

--enable-debug)
debugsym=true;;
--disable-debug)
debugsym=false;;

--help)
echo 'usage: ./configure [options]'
echo 'options'
echo ' --prefix=<path>: installation prefix'
echo ' --enble-debug: include debug symbols'
echo ' --enble-debug: do not include debug symbols'
echo 'all invalid options are silently ignored'
exit 0
;;
esac
done

echo 'generationg makefile ...'
echo "PREFIX = $prefix" >> Makefile

if $debugsym; then
echo 'dbg = -g' >> Makefile
fi

cat Makefile.in >> Makefile
echo 'cofiguration complete, type make to build.'

  

转载于:https://www.cnblogs.com/kouruyi/p/8966647.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
autoconf和automake是一组用于生成makefile文件的工具,用于自动化构建过程。autoconf主要用于检测系统环境和软件依赖,而automake用于生成makefile文件。 在使用autoconf生成makefile文件的过程中,首先需要创建一个configure.ac文件,该文件包含了一些宏和脚本代码。在configure.ac文件中,通过使用宏来检测系统环境,比如检测编译器、库和头文件的存在与版本。同时,还可以通过宏来检测用户配置选项,比如编译参数和安装路径等。 在configure.ac文件中,可以使用一些宏编写脚本代码来实现自定义操作。例如,可以使用AC_CHECK_LIB宏来检测某个库是否存在,AC_CHECK_HEADER宏来检测某个头文件是否存在,AC_CONFIG_FILES宏来定义要生成的makefile文件等。 然后,通过运行autoconf命令来生成一个configure脚本。这个configure脚本用于根据configure.ac文件中的宏和脚本代码来生成makefile.in文件,makefile.in文件是一个模板文件,它包含了一些变量和规则,但是还没有具体的值。 接下来,使用automake工具来生成最终的makefile文件。automake会读取configure.ac文件和makefile.in文件,并根据约定的规则自动生成makefile文件。在生成makefile文件的过程中,automake会根据configure.ac文件中的宏和脚本代码来解析变量的默认值和用户配置选项,以及生成各个编译目标和规则。最终生成的makefile文件可用于构建和安装软件。 总结来说,autoconf和automake是一对强大的工具,可以自动化生成makefile文件,减少开发人员的工作量。通过检测系统环境和用户配置选项,以及根据约定的规则生成makefile文件,可以方便地进行软件构建和安装。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值