Makefile.am과 Makefile.in은 무엇입니까?


335

이 두 파일은 주로 오픈 소스 프로젝트에서 볼 수 있습니다.

무엇을위한 것이며 어떻게 작동합니까?

답변:


381

Makefile.am프로그래머 정의 파일에 의해 사용되는 automake생성]하는 Makefile.in파일 ( .am용 스탠드 우토의 m의 아케). 일반적으로 소스 타르볼에서 볼 스크립트가 사용할 를 생성하는configureMakefile.inMakefile .

configure스크립트 자체가 하나라는 프로그래머 정의 파일에서 생성됩니다 configure.ac또는 configure.in(사용되지 않음). 내가 선호하는 .ac(대한 우토 C 는 생성에서 차별화 이후 ONF) 파일과 그런 식으로 내가 같은 규칙을 가질 수 있습니다 실행됩니다 . 파일은 생성 된 파일이므로 일반적으로 Git, SVN, Mercurial 또는 CVS와 같은 수정 시스템에 저장되지 않고 파일이됩니다.Makefile.inmake dist-cleanrm -f *.in.ac

GNU Autotools 에 대해 더 읽어보십시오 . 에 대해 읽어 makeMakefile먼저 다음에 대해 자세히 알아보기 automake, autoconf, libtool, 등


3
무엇 .in을 의미합니까?
Utku

10
.in위한 그것의 입력이 그 연장 수단 configure, 표기되지 최종 파일 마사지 (예와 함께 make). : 당신이 "무지"복잡한이 보인다 이유에, 읽어보세요 궁금하다면 stackoverflow.com/a/26832773/939557 등 GitHub의와 요즘의 autoconf의 가정 중 일부는 분해되어 일반 유통 채널이되고 : 사람들이 획득된다 유지 보수자가 작성한 소스 분배 tarball을 사용하지 않고 소스 코드 제어 도구에서 직접 소스.
MadScientist

53

간단한 예

http://www.gnu.org/software/automake/manual/html_node/Creating-amhello.html 에서 뻔뻔스럽게 조정 되었으며 Ubuntu 14.04 Automake 1.14.1에서 테스트되었습니다.

Makefile.am

SUBDIRS = src
dist_doc_DATA = README.md

README.md

Some doc.

configure.ac

AC_INIT([automake_hello_world], [1.0], [bug-automake@gnu.org])
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
AC_PROG_CC
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([
 Makefile
 src/Makefile
])
AC_OUTPUT

src / Makefile.am

bin_PROGRAMS = autotools_hello_world
autotools_hello_world_SOURCES = main.c

src / main.c

#include <config.h>
#include <stdio.h>

int main (void) {
  puts ("Hello world from " PACKAGE_STRING);
  return 0;
}

용법

autoreconf --install
mkdir build
cd build
../configure
make
sudo make install
autoconf_hello_world
sudo make uninstall

출력 :

Hello world from automake_hello_world 1.0

노트

  • autoreconf --install를 포함하여 Git에서 추적해야하는 여러 템플릿 파일을 생성합니다 Makefile.in. 처음으로 만 실행하면됩니다.

  • make install 설치 :

    • 이진 /usr/local/bin
    • README.md/usr/local/share/doc/automake_hello_world

GitHub 에서 사용해보십시오.


1
VCS에서 생성 된 파일을 유지해야하는 이유는 무엇입니까 (Git BTW뿐 아니라)?
Victor Yarema

@VictorYarema 나는 그 결론에 도달 한 이유를 잊었다! 알게되면 알려주세요.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

19

개발자 실행 autoconf 하고 automake:

1) autoconf를이 -로 선적 생성 구성 스크립트
설치 나중에 것 ( 실행 를 만들기 위해를 Makefile )

2) Automake는 -로 선적 생성 Makefile.in의 데이터 파일
( 구성 나중에 것입니다 읽어 하기 위해 Makefile을 )


설치 프로그램 실행 configure, makesudo make install:

./configure       # Creates  Makefile        (from     Makefile.in).  
make              # Creates  the application (from the Makefile just created).  

sudo make install # Installs the application 
                  #   Often, by default its files are installed into /usr/local


입력 / 출력 맵

아래 표기법은 대략 다음과 같습니다 : 입력-> 프로그램-> 출력

개발자는 다음을 실행합니다.

configure.ac -> autoconf를 -> 구성 (스크립트) --- (*. AC = 우토 ONF) configure.in -> autoconf를 -> 구성 (스크립트) --- (
configure.in 감가 상각 사용 configure.ac.)

Makefile.am-> automake- > Makefile.in ----------- (*. am = a uto m ake)

INSTALLER가 다음을 실행합니다.

Makefile.in-> 구성 -> Makefile (*. in = in 넣어 파일)

Makefile- > make ----------> (다운로드 또는 임시 디렉토리에 새 소프트웨어를 넣습니다)
Makefile- > make install > (시스템 디렉토리에 새 소프트웨어를 넣습니다)


" autoconf 자동으로 구성 소프트웨어 소스 코드 패키지에 쉘 스크립트를 생성 M4 매크로의 확장 패키지입니다.이 스크립트는 UNIX와 같은 수동 사용자 개입없이 시스템. Autoconf에 많은 종류의 패키지를 적용 할 수는에서 패키지의 구성 스크립트를 생성 "M4 매크로 호출 형식으로 패키지에서 사용할 수있는 운영 체제 기능을 나열하는 템플릿 파일"

" automake 는 GNU 코딩 표준을 준수하는 Makefile.in 파일을 자동으로 생성하는 도구입니다. Automake는 Autoconf를 사용해야합니다."

매뉴얼 :

무료 온라인 자습서 :


예:

LibreOffice를 구축하는 데 사용되는 기본 configure.ac 는 12k 개가 넘는 코드 라인이지만 하위 폴더에는 57 개의 다른 configure.ac 파일도 있습니다.

이로부터 생성 된 구성 은 41k 줄 이상의 코드입니다.

그리고 그 동안 Makefile.in메이크 코드의 양에만 493 라인이다. 그러나 하위 폴더에는 Makefile.in이 768 개 더 있습니다.


16

참고 :

Makefile.am-자동 작성을위한 사용자 입력 파일

configure.in-autoconf에 대한 사용자 입력 파일


autoconf는 configure.in에서 configure를 생성합니다

automake는 Makefile.am에서 Makefile.in을 생성합니다.

configure는 Makefile.in에서 Makefile을 생성합니다.

예를 들어 :

$]
configure.in Makefile.in
$] sudo autoconf
configure configure.in Makefile.in ... 
$] sudo ./configure
Makefile Makefile.in

dist를 만들 때 Makefile.in이 tar.gz 파일에 있어야합니다.
Kemin Zhou
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.