2010-01-15 4 views
1

나는 그 프로그램에 header.h의 도움으로 header.c를 호출하는 main.c 프로그램을 가지고있다. GCC에서 컴파일하는 방법을 알고 있지만 지금은 autotools를 사용하고 싶습니다. main.c를 컴파일하기 위해 Makefile.am에 무엇을 써야하는지 알고 싶습니다. 내가이 개 C 파일을 main.c과 header.c이있는 경우2 개의 프로그램을위한 autotools

은 그래서 예를 들어

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로 작성해야하는지,이 경우

답변

0

최소한의 Makefile.am :

# 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 
: 당신은뿐만 아니라 configure.ac를해야 할 수도 있습니다

SHELL = /bin/sh 

prefix = /usr/local 
exec_prefix = @[email protected] 
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 

4

다음은 설명하는 상황에 필요한 최소한의 예입니다. (그들은 자동으로 감지, 당신은 헤더 파일을 나열 할 필요는 없습니다)

당신은 구축 할 수있는 바이너리의 이름이 포함 된 makefile.am해야하고, 소스 파일을 작성하는 데 사용 :

bin_PROGRAMS = example 
example_SOURCES = main.c header.c 

그리고 configure.ac이 필요합니다. 여기서 프로그램의 이름과 버전 번호를 설정하고 foreign 인수로 Automake를 초기화하여 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 빌드를 돕기 위해 사용할 수있는 템플릿이 포함되어 있습니다. 하지만 프로그램이 단순하다면이 단계를 건너 뛰고 위의 최소 예제를 사용할 수 있습니다.

위의 구성 파일에서 Makefile.inconfigure을 빌드하고 필요한 파일을 복사하려면 autoreconf --install을 실행하십시오. 그런 다음 ./configure을 실행하여 스크립트를 구성하여 Makefile을 생성하십시오. 마지막으로 make을 실행하여 프로그램을 빌드하십시오.

다음 단계, 당신은 지금부터, 당신은 단지 make을 실행할 수 있어야합니다, 그래서 모든 단계를 통해 이동하지 않고, 당신의 makefile.am에 대한 변경 사항을 감지하고 다시 단계를 실행 생성 한 Makefile을 수행하면 다시.

자세한 내용은 AutomakeAutoconf 설명서를 참조하십시오.

0

예를 들어, 두 개의 c 파일 main.c 및 헤더가있는 경우입니다.C는

main.c의 아래 주어진 -

포함 "header.h가"

INT 메인 등 (의 INT는 argc, 문자 *를는 argv []) {

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

return 0; 은}

내 header.c 파일

무효 기능 1() { 의 printf ("\ n 안녕하세요")를 포함 포함; }

그래서 내 header.h 파일에 이 포함됩니다. void function1();

이 경우 makefile.am 및 configure.ac에 작성해야 할 내용

+1

안녕하세요, Jinal. 당신은 여기에서 새로운 것처럼 보이므로 사이트 사용 방법에 대한 조언을 드리겠습니다. 이와 같은 설명은 자신의 질문에 대한 대답이 아닌 원래 질문에 대한 편집으로 수행되어야합니다. 질문의 왼쪽 하단을보십시오. 당신은 클릭 할 수있는 작은 "편집"링크가 보일 것입니다. 그런 다음 질문을 편집하여 설명을 제공하십시오. 또한 모든 소스 코드는 4 칸 들여 쓰기해야합니다. 이로 인해 소스 코드로 서식이 지정되고 스타일이 지정된 텍스트로 해석되지 않습니다. 전체 코드 블록을 선택하고'101010' 버튼을 눌러 들여 쓰기 할 수 있습니다. –

+0

나는 이미 편집을 끝냈습니다. 숙련 된 사용자는 다른 사람들의 질문과 답변을 편집하여 이와 같은 문제를 해결할 수 있습니다. 질문에 적절하게 대답하지 못했다면 응답 한 사람들이 왜 자신의 대답이 좋지 않거나 일하지 않는지 알 수 있도록 응답 할 수도 있습니다. 내가 제공 한 대답은 당신이 여기에 묘사 한 정확한 상황 (심지어 예제 프로젝트로 테스트 해 보았습니다.)에서 작동해야합니다. 그래서 당신이 어떤 부분이 당신에게 효과가 없다고 말할 수 있다면 더 나은 대답을 줄 수 있습니다. 또는 내 대답이 명확하지 않은 곳. –

관련 문제