用automake和autoconf安装c++程序

Install C++ program with automake and autoconf

本文关键字:c++ 程序 安装 autoconf automake      更新时间:2023-10-16

我用c++写了一个程序,但是现在我必须用autoconf和automake来安装这个程序。

所以,当我运行命令"。/配置,,使,,,它必须完成以下操作:

  • 编译程序
  • 在/opt中创建文件夹my_program(例如:/opt/my_program/),在这个文件夹中我还必须有所有的静态库和源文件
  • my_program
  • 必须在/usr/local/bin中有符号链接
  • 库必须在/usr/local/lib(完成-感谢@Galik)
  • my_program的头文件必须在/usr/local/include (DONE)

我已经写了这个配置。ac脚本:

#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.69])
AC_INIT([my_program], [0.1], [my_mail])
AC_CONFIG_SRCDIR([AbsAlgorithm.hpp])
AM_INIT_AUTOMAKE
# Checks for programs.
AC_PROG_CXX
AC_PROG_CC
# Checks for libraries.
# Checks for header files.
AC_CHECK_HEADERS([stdlib.h string.h sys/time.h unistd.h wchar.h wctype.h])
# Checks for typedefs, structures, and compiler characteristics.
AC_CHECK_HEADER_STDBOOL
AC_C_INLINE
AC_TYPE_SIZE_T
# Checks for library functions.
AC_FUNC_MALLOC
AC_FUNC_MKTIME
AC_CHECK_FUNCS([gettimeofday memset mkdir])
LIBS="-ldl"
AC_CONFIG_FILES([Makefile])
AC_OUTPUT

和这个Makefile。是脚本:

AUTOMAKE_OPTIONS = foreign
AM_CXXFLAGS=-Wall -std=gnu++11 -DVERSION="$(VERSION)" -DPROG=""$(PACKAGE)""
bin_PROGRAMS = algatorc
noinst_LIBRARIES = libalgatorc.a
libalgatorc_a_SOURCES = Timer.cpp
include_HEADERS = Timer.hpp TestSetIterator.hpp TestCase.hpp ETestSet.hpp EParameter.hpp Entity.hpp ParameterSet.hpp AbsAlgorithm.hpp Log.hpp JSON.hpp
algatorc_SOURCES = ParameterSet.cpp TestCase.cpp EParameter.cpp ETestSet.cpp TestSetIterator.cpp Entity.cpp Timer.cpp  main.cpp JSON.cpp JSONValue.cpp

现在,当我运行"。/配置,,使,,我没有在/opt目录下找到名为my_program的新文件夹。但是,现在,我在/usr/local/include中确实有头文件。我在/usr/local/lib中没有lib文件python只有一个文件夹。我想有一个名为my_program的文件夹,在这个文件夹中我想有静态库。

我使用的是Ubuntu 12.04 x64

我将感激任何帮助。由于

Autotools并不是为了把东西放在特定的位置而设计的。这个想法是程序在programs目录 $(bindir)中,库在libraries目录 $(libdir)中等等,并且安装所有东西的人可以决定这些位置在哪里。

所以你真的应该只关心安装程序的人希望它们在哪里安装。

他们通过向configure脚本添加参数来实现这一点,如:

configure --prefix=/opt/myprog

通常会安装/opt/myprog/bin中的程序和/opt/myprog/lib中的库等…

您可以通过设置特殊的dir变量来添加安装的位置。例如,要将库放在$(libdir)的子目录中(默认为/usr/local/lib),您可以这样做:

myprog_librarydir = $(libdir)/myprog

对于头文件也是如此:

myprog_includedir = $(prefix)/include/myprog

它定义了一些你可以引用的目标文件夹,而不是默认值:

myprog_include_HEADERS = 
    Timer.hpp 
    TestSetIterator.hpp 
    TestCase.hpp 
    ETestSet.hpp 
    EParameter.hpp 
    Entity.hpp 
    ParameterSet.hpp 
    AbsAlgorithm.hpp 
    Log.hpp 
    JSON.hpp

这些现在将被安装到$(prefix)/include/myprog

与相应的库类似:

myprog_library_LIBRARIES = libmyprog.a
libmyprog_a_SOURCES = 
    ParameterSet.cpp 
    TestCase.cpp 
    EParameter.cpp 
    ETestSet.cpp 
    TestSetIterator.cpp 
    Entity.cpp 
    Timer.cpp 
     JSON.cpp 
    JSONValue.cpp

基本上你创建一个目标(安装)目录使用:

mynamedir = $(prefix)/path/... whatever

允许您设置bin_, lib_include_等以外的目的地…

lib_LIBRARIES改成myname_LIBRARIES

希望对你有帮助。