автоинструменты для 2 программ - PullRequest
1 голос
/ 15 января 2010

У меня есть программа main.c, которая вызывает header.c с помощью header.h в своей программе. Я знаю, как скомпилировать его в GCC, но теперь я хотел бы использовать для этого автоинструменты. Я хотел бы знать, что должно быть написано в Makefile.am для компиляции main.c?

так, например, если у меня есть два файла c main.c и header.c, как указано ниже

main.c: -

#include<stdio.h>
#include"header.h"
int main(int argc, char* argv[])
{

   printf("\n Hello");
  function1();

   return 0;
}

и мой файл header.c содержит

#include<stdio.h>
void function1()
{
  printf("\n Hi");
}

так что мой файл header.h будет содержать

void function1();

тогда в этом случае то, что должно быть записано в makefile.am и configure.ac

Ответы [ 3 ]

4 голосов
/ 15 января 2010

Вот минимальный пример того, что вам нужно для описываемой вами ситуации.

Вам необходим makefile.am, содержащий имя двоичного файла для сборки и исходные файлы, использованные для его сборки (выНе нужно перечислять заголовочные файлы, они будут обнаружены автоматически):

bin_PROGRAMS = example
example_SOURCES = main.c header.c

А вам нужно configure.ac.Здесь вы устанавливаете имя и номер версии программы, инициализируете Automake с аргументом foreign, чтобы он не жаловался на отсутствующие файлы, которые требуются проекту GNU, скажите, что вам нужен компилятор C, скажитечтобы построить свой Makefile и, наконец, сказать ему выводить результаты предыдущей конфигурации.

AC_INIT([example], [1.0])
AM_INIT_AUTOMAKE([foreign])
AC_PROG_CC
AC_CONFIG_FILES([Makefile])
AC_OUTPUT

Если ваша существующая программа имеет какие-либо зависимости от библиотек, вы можете запустить autoscan, чтобы обнаружить возможные зависимости,Он создает файл configure.scan, который содержит шаблон, который можно использовать для создания вашего configure.ac;но если ваша программа проста, вы можете пропустить этот шаг и использовать минимальный пример, приведенный выше.

Теперь запустите autoreconf --install, чтобы скопировать необходимые файлы и собрать Makefile.in и configure из приведенного вышеконфигурационные файлы.Затем запустите ./configure, чтобы сконфигурировать ваш скрипт, сгенерировав Makefile.Наконец, запустите make для сборки вашей программы.

Как только вы выполните эти шаги, сгенерированный вами Makefile обнаружит изменения в вашем makefile.am и снова запустит шаги, так что теперь, вы должны иметь возможность просто запустить make, не выполняя все эти шаги снова.

См. руководства Automake и Autoconf для получения дополнительной информации.

0 голосов
/ 15 января 2010

так, например, если у меня есть два файла c main.c и header.c, как указано ниже

main.c: -

включают

включают "header.h"

int main (int argc, char * argv []) {

printf ("\ n Hello"); function1 ();

возврат 0; }

и мой файл header.c содержит

включают

void function1 () { printf ("\ n Hi"); }

так что мой файл header.h будет содержать void function1 ();

тогда в этом случае то, что должно быть записано в makefile.am и configure.ac

0 голосов
/ 15 января 2010

минимальный Makefile.am:

SHELL = /bin/sh

prefix = /usr/local
exec_prefix = @prefix@
bindir = ${exec_prefix}/bin

AM_CFLAGS = -I./

bin_PROGRAMS = your_program_name

niue_SOURCES = main.c


install-exec-local:
    cp ./your_program_name ${bindir}

uninstall-local:
    rm ${bindir}/your_program_name

Вам также может понадобиться файл configure.ac:

# Process this file with autoconf to produce a configure script.

AC_PREREQ(2.59)
AC_INIT(your_program_name, 0.1, you@yourdomain.com)
AM_INIT_AUTOMAKE
AC_CONFIG_SRCDIR([main.c])
AC_CONFIG_HEADER([config.h])

# Checks for programs.
AC_PROG_CC

# Checks for additional libraries.
# AC_CHECK_LIB([pthread], [pthread_create])

# Checks for additional header files.
# AC_CHECK_HEADERS([getopt.h])

# Checks for typedefs, structures, and compiler characteristics.
AC_HEADER_STDBOOL
AC_C_CONST
AC_TYPE_SIZE_T
AC_HEADER_TIME
AC_C_VOLATILE

# Checks for library functions.
AC_HEADER_STDC
AC_FUNC_SELECT_ARGTYPES
#AC_CHECK_FUNCS([getopt_long])

AC_CONFIG_FILES([Makefile])
AC_OUTPUT
...