автоинструменты на 2 программы

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

так, например, если у меня есть два файла c main.c и header.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


person jinal    schedule 15.01.2010    source источник


Ответы (3)


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

Вам нужен 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 для получения дополнительной информации.

person Brian Campbell    schedule 15.01.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, [email protected])
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
person Vijay Mathew    schedule 15.01.2010

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

основной.с:-

включают

включить "header.h"

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

printf("\n Привет"); функция1();

вернуть 0; }

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

включают

void function1() { printf("\n Привет"); }

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

то в этом случае что надо прописать в makefile.am и configure.ac

person jinal    schedule 15.01.2010
comment
Привет, Джинал. Похоже, вы здесь новенький, поэтому я дам вам несколько советов, как пользоваться сайтом. Подобное разъяснение должно быть сделано как редактирование вашего исходного вопроса, а не как ответ на ваш собственный вопрос. Посмотрите на нижний левый угол вашего вопроса; вы должны увидеть небольшую ссылку редактирования, по которой вы можете щелкнуть, а затем отредактировать свой вопрос, чтобы предоставить какие-либо разъяснения. Также любой исходный код должен иметь отступ в 4 пробела; это приведет к тому, что он будет отформатирован как исходный код, а не интерпретирован как стилизованный текст. Вы можете выбрать целый блок кода и нажать кнопку 101010, чтобы сделать отступ. - person Brian Campbell; 15.01.2010
comment
Я уже сделал редактирование для вас; опытные пользователи могут редактировать вопросы и ответы других людей, чтобы помочь с подобными проблемами. Если вы не считаете, что на ваш вопрос был дан адекватный ответ, вы также можете ответить, чтобы люди, которые ответили, знали, почему их ответы недостаточно хороши или не работают для вас. Ответ, который я предоставил, должен работать именно для той ситуации, которую вы описываете здесь (я даже протестировал его на примере проекта), поэтому он помог бы мне дать вам лучший ответ, если бы вы могли сказать мне, какая часть не работает для вас, или где мой ответ неясен. - person Brian Campbell; 15.01.2010