Autotools
Autotools는 autoconf, automake, libtool 도구들로 구성되어 있는 build system 입니다. 대부분의 GNU 프로그램들은 Autotools를 사용해 Build 환경을 구성합니다. 사용자 입장에서는 다음의 명령어로 소스 패키지를 컴파일 하고 설치할 수 있는데, 이러한 빌드 환경을 제공하는 것이 Autotools의 역할입니다.
./configure 스크립트는 현재 시스템에 어떤 프로그램과 라이브러리가 설치되어 있는지를 분석해 Makefile을 생성합니다. 만약 빌드시 필요한 라이브러리가 없다면 사용자에게 로그를 통해 필요한 정보를 알려줍니다. 이는 사용자 입장에서 꽤 유용할 수 있는데 굳이 많은 시간이 소요되는 빌드를 하지 않고도 필요한 정보를 얻을 수 있기 때문입니다. 그리고 ./configure의 옵션을 이용해 빌드시 사용되는 환경변수를 설정하거나 다양한 플랫폼을 지원하는 Makefile을 생성할 수 있습니다.
make 는 실제로 소스를 컴파일하는 명령어입니다. make install은 make 명령어를 통해 빌드된 바이너리와 라이브러리를 prefix(configure 스크립트의 옵션 중 하나)로 지정된 폴더에 설치하는 명령어입니다.
현재 개발중인 소스에 Autotools를 적용하려면 다음의 두 파일을 작성해야 됩니다.
‘Makefile.am’ An input to automake
‘configure.ac’ An input to autoconf
Makefile.am은 automake 명령어의 입력으로 사용되는데, automake는 Makefile.am을 기반으로 Makefile.in 파일을 생성합니다. Makefile.in은 Makefile을 생성하기위한 템플릿이라고 보면 될 것 같습니다.
configure.ac는 autoconf 명령어의 입력으로 사용되는 파일입니다. 내부적으로 복잡한 과정을 거치지만 결과적으로 configure 스크립트를 생성하게 됩니다. configure.ac의 경우 autoscan 이라는 명령어를 통해 configure.scan 이라는 기본 파일을 생성할 수 있습니다. 일반적으로 configure.scan 파일을 configure.ac로 복사한 후 필요한 옵션들을 추가하는 방법을 사용합니다.
명령어
Openmp
쓰레드는 master thread에서 선택한 thread 갯수만큼 slave thread를 fork해서 만들고 이후 join으로 다시 원래 master thread로 복귀한다.
사용할때는 <omp.h>를 포함해주고 #pragma omp parallel 아래에 있는 것에대해 thread 가 생성된다.
Makefile
complie option에 openmp 라이브러리를 사용하겠다고 명시해줘야한다.
그래서 source가 cpp인경우
프로그램이름_LDFLAGS=-fopenmp
프로그램이름_CPPFLAGS=-fopenmp
두가지 옵션을 설정해주면 성공적으로 gcc(g++) 컴파일 시 -fopenmp가 같이 뜨는 것을 알 수 있다.
기존 사용하는 코드에서는 자동으로 Multi Threading이 이뤄지고 있어서 이러한 부분들은 모르고 있었는데 새로운 내용을 알려주셔서 감사합니다.