본문 바로가기
Lap

180703 cmake를 알아보자

by matters_ 2018. 7. 3.



어제에 이어 realsense 코드 실행을 이어가보자 



우선 링킹 오류가 있는 것이 분명했다



심각도 코드 설명 프로젝트 파일 비표시 오류(Suppression) 상태

오류 LNK1107 파일이 잘못되었거나 손상되었습니다. 0x89A에서 읽을 수 없습니다. 627capture D:\project\627capture\librealsense-

master\scripts\ubuntu-xenial\ubuntu\opennsl\OpenNSL\sdk-6.5.10-gpl-modules\make\Make.lib 1



자꾸 이런 오류가 뜬다..
답답해 이번에는 초심으로 돌아가보기로 했다. c++책을 들고 기본을 공부해보자
c++ 프로그램 개발과정을 다시 들여다 보았다.


우선 c++ 소스 프로그램(hello.cpp)을 작성한다. 이후 컴파일러가 컴파일을 하고 소스 프로그램이 목적 파일로 변한다 (hello.obj) 
이후 링킹작업이 이루어 지는데 여기서 링킹이란 어떤 목적 파일이 참조하는 c++ 표준 라이브러리나 다른 목적 파일 속에 있는 함수, 객체, 데이터를 포함하여 실행에 필요한 모든 기계어 코드를 확보하여 하나의 실행 파일로 만드는 과정이다. 링킹의 결과로써 비로소 실행에 필요한 모든 요소를 포함한 하나의 실행 파일(hello.exe)이 만들어 진다.   

밑의 그림을 참조하면 이해가 빠를꺼 같다.


자 다시 내 문제로 돌아가서 링크에러가 뜨는걸 보니 분명 링킹에 문제가 있음이 자명했다.

그럼 링킹부분을 책에서 자세히 알아보기로 했다.



링킹


컴파일 후 기계어로 구성된 목적 파일(object file)이 생성되었다 하더라고 목적 파일은 바로 실행될 수 없다. 개발자가 작성한 c++ 프로그램이 표준 c++ 라이브러리나 다른 c++ 프로그램에 있는 함수, 객체, 데이터를 이용하는 경우, 개발자가 작성한  c++ 소스의 목적파일에는 이들에 대한 참조 표시만 있을 뿐 이들 코드를 포함하지 않는다. 그러므로 목적 파일은 온전한 실행파일이 아니며 이들과 결합하여하만 비로소 실행 가능한 파일이 된다. 


즉 요약하면 링크는 말그대로 c++ 프로그램의 구성요소들을 한대 모으는 즉 연결시켜주는 단계인 것이다.



오류 메시지로 돌아가면 

심각도 코드 설명 프로젝트 파일 비표시 오류(Suppression) 상태

오류 LNK1107 파일이 잘못되었거나 손상되었습니다. 0x89A에서 읽을 수 없습니다. 627capture D:\project\627capture\librealsense-master\scripts\ubuntu-xenial\ubuntu\opennsl\OpenNSL\sdk-6.5.10-gpl-modules\make\Make.lib 1



이러한 오류는 즉 구성요소의 파일이 잘못되었거나 읽을 수 없다. 즉 make.lib 파일이  읽을수 없다는 뜻이다. 그렇다면 다시 
라이브러리 종속성 추가를 해제해 보기로 했다. 

그래서 다시 67개의 오류가 있는 단계로 다시 돌아갔다.


여기서 연구실형의 도움을 청해보았는데 cmake를 뭐 해서 해야한단다그럼 cmake를 알아보자 .




 CMake(Cross Platform Make)는 멀티 플랫폼으로 사용할 수 있는 Make의 대용품을 만들기 위한 오픈소스 프로젝트로 키트웨어와 인사이트 콘솔티엄에서 만들었다. 스스로 기존의 Make의 과정을 수행하지는 않고 지정한 운영체제에 맞는 Make 파일(마이크로소프트 윈도에서는 솔루션 파일)의 생성만을 수행하기 때문에 Meta Make라고도 불린다.


※ 가장 큰 이점은 유닉스 계열의 OS 중심이던 기존의 Make와 달리 한번 작성해 두면 유닉스 계열은 물론, 윈도 계열의 프로그래밍 도구도 지원한다.


여기서 여러 빌드 도구를 살펴보자면

- GNU build system(주로 autotools라고 부름 / 소스 코드 패키지를 수많은 유닉스 계열 운영 체제로 포팅할 수 있게 도와 주는 프로그래밍 도구 제품군이다. / 위키 링크)

- Waf(콘피규어링을 위한 파이선 기반의 프레임워크로 어플리케이션의 컴파일과 인스톨을 수행한다. / Waf is a Python-based framework for configuring, compiling and installing applications. Here are perhaps the most important features of Waf / 와프 링크)

- SCons[오픈 소스 소프트웨어 빌드 도구. SCons는 autoconf/automake의 기능과 ccache(ccache는 사용자 디렉토리에 .ccache라는 폴더를 생성하여 object 파일을 해싱하여 저장 - preprocessor를 거친 소스코드를 해슁하여 해당 키와 겹치는 object코드가 있으면 컴파일 하지 않고 해당 object를 그냥 반환함.) 와 같은 컴파일러 캐시를 통합한, 고전적인 Make 유틸리티의 대체품이다. 이전의 도구들과 비교하여, SCons는 더 쓰기 쉽고, 더 신뢰할 수 있고, 더 빠른 것을 목표로 한다. / 위키 링크]


b. CMake도 위와 유사한 빌드 도구 중 하나입니다.

 CMake는 여러가지 이점이 있습니다. 

 예를 들자면 KDE(다양한 운영체제에서 구동 가능한 프로그램들을 제작하는 다국적 자유 소프트웨어 커뮤니티) SCons 에서 CMake로 빌드 툴을 변경했는데 그 이유를 다음과 같이 서술 하고 있습니다.

- 이점(Pros / advantages)

1. CMake는 KDE의 빌드에 없었던 여러가지 향상된 부분들을 제공한다.

2. 이것은 마치 프레임워크처럼 완전한 작업 설정을 지원한다, 이로써 쓰기가 쉽다.

3. 나(Peter Linnell)는 대부분의 kdelibs(The KDE Library API Reference / KDE3)를 관리했다.

4. CMake는 C++ 컴파일러를 제외하고 다른 위존성이 없다.

5. CMake는 기본적인 모든 UNIX, MS Windows(MSVS, Borland, cygwin, mingw)와 Mac OS X를 지원한다.

6. CMake는 KDevelop3, MSVC 6, 7, XCode를 위한 Makefile들과 프로젝트들을 생성할 수 있다.

7. CMake는 단순한 구문을 가지고 있다.

8. 이것은 테스팅 프레임워크의 특징들이다.

9.  이것은 compiling libs, apps, KDE kparts, KDE ioslaves, KDE loadable modules, -enable-final, la-file generation을 지원한다.

10. Makefile을 CMake 파일로 90변환을 지원하는 루비 스크립트로 작성된 am2cmake가 있다.


- 단점(Cons / disadvantages)

1. 파일 설치 작업을 위한 CMake 커맨드는 강력하지 않다, 하지만 KDE를 지원하기 위해 고쳐질 수 있다는 것을 개발자들은 안다.

2. 설치중에 relinking이 확실하지 않다.

3. 진행 상황 %가 나오지 않는다 : 이것은 CMake에선 완성될 수 없다, CMake는 자체로 빌드 시스템이 아니기 때문, 이것은 단지 native buildsystem을 위한 입력 파일들을 생성한다.


c. 이런 장단점으로 인해서 CMake를 사용한다고 합니다.



 즉,CMake는 멀티 플랫폼을 위한 빌드 지원 시스템이며 사용이 쉽고 관리하기 편하다.


- 참고 사항 

http://lwn.net/Articles/188693/

http://bunhere.tistory.com/256

http://ko.wikipedia.org/wiki/KDE

http://en.wikipedia.org/wiki/Decision_making

http://ko.wikipedia.org/wiki/CMake


출처: http://chiccoder.tistory.com/46 [시크한 공돌이의 IT 블로그]




이렇다는데 와 오졋다 


https://cmake.org/download/ 들어가면




자기 운영체제에 맞는 거 다운받아 설치하고






실행하려는 폴더에 보면 CmakeCache.txt 파일이 있다 경로에 들어가서 위와 같이 실행해주면





난 이미 한번 실행한 상태라 좀 짧게 나오는데

무튼 이런식으로 빌드가 됨을 알 수 있다.

여기서 어떻게 되는 지 몰라 헤맷는데 구글신의 도움을 받아





다시 폴더에 들어가보니 전에 없던 프로젝트 파일이 생성된 것을 확인하고 실행하였다.  나이쑤~~~~
해결되는 감격의 순간!



깃헙의 realsense 예제를 실행하였다~~ㅎㅎㅎ





 


댓글