동적 라이브러리나 의존성을 파악해서 빌드하게끔 하려면 어찌 해야합니까?

lithium81의 이미지

안녕하세요.

최근 작성한 프로그램(일종의 시뮬레이터입니다)을 후임자에게 인수인계를 해야 하는 상황입니다.

그 동안 저 혼자서 소규모로만 개발해오고 있던 것이라 주먹구구식으로 작성한 부분도 많은데 몇 가지 현실적인 문제가 생겨서 문의를 드립니다.

저는 리눅스에서 인수인계할 프로젝트를 작성했습니다.

기본적으로 굵직굵직한 라이브러리로는 Qt, OpenSceneGraph, osgWorks, Bullet, osgBullet 등이 필요합니다.

그 외에 갖은 소규모 라이브러리들도 필요하고요.

사용자인터페이스는 Qt를, 그래픽 렌더링 및 관리에는 OSG, osgWorks 등이 쓰였고, 그래픽 객체의 물리 시뮬레이션에는 Bullet과 osgBullet이 쓰였습니다.

후임자는 리눅스 쓸 줄을 모릅니다. 그런 까닭에 윈도우즈로 포팅해줘야 할 것 같습니다.

다행히도 제가 작성한 코드는 플랫폼 의존적인 부분이 거의 없어서 포팅은 어찌저찌 될 것 같습니다.

후임자는 Visual Studio나 Eclipse CDT 등으로 개발할 것 같습니다.

결국 배포 및 설치의 문제인 것 같은데요...

저는 기본이 전산 베이스도 아니고, 연구실에 있으면서 연구 목적에 맞게 그 때 그 때 간단한 프로그램을 작성해왔기 때문에 빌드 시스템을 제대로 사용해본 적이 없습니다.

지금 이 프로젝트도 Qt 등에서 쓰이는 *.pro 파일을 작성하고 거기에 옵션을 넣고 인클루드 잡고 라이브러리 잡고 해서 결국은 qmake로 자동적으로 Makefile이 나오게 하여 그걸 가지고 빌드하고 있습니다.

결국 핵심은 서로 다른 플랫폼, 컴파일러, 라이브러리, 버전 및 의존성 등 여러가지 변수들을 자동적으로 파악해서 설치될 시스템에 적당한 Makefile을 자동적으로 생성해주는 과정이 필요할 것 같습니다.




질문 1) 위와 같은 경우, 어떤 도구를 사용하시는지 궁금합니다.

크로스플랫폼인 상황이니 CMake가 좋을까요?

Qt를 꽤 썼고 후임도 Qt를 써야만 하는 상황일테니, 제가 그랬던 것처럼 *.pro 파일과 qmake를 이용해서 빌드하라고 해야 할까요?

아니면 Visual Studio용 *.sln 이나 *.dsp 파일을 만들어서 후임에게 줘야할까요?




질문 2) autoconf/automake나 CMake와 같은 빌드툴은 설치가 될 시스템에 필요한 라이브러리가 있는지 없는지, 버전은 호환되는지 등의 정보를 자동적으로 체크해주는 기능이 있나요?




질문 3) 그냥 후임에게 Qt, OSG, osgWorks, Bullet, osgBullet, 이것저것 등등 알아서 깔아놓으라고 하고, Visual Studio나 Eclipse CDT에서 프로젝트 설정을 새로 잡는 게 더 현실적(practical)이려나요?




조언과 경험 좀 나눠주시기를 부탁드립니다.

익명_사용자의 이미지

== 질문2 ==
autoconf, cmake, qmake등에 필요한 라이브러리가 있는지 없는지, 버젼은 호환되는지의 정보를 체크해주는 기능이 있습니다.
하지만, 해당 라이브러리가 필요하다고 명시를 해야지, 그 명시된 라이브러리를 자동으로 찾아주는것입니다.
뭐가 필요한것인가까지, 자동으로 찾아서 해결해주는 그런툴은 존재하지 않습니다.

== 질문3 ==
원론적으로 바라보자면, 질문2에 언급된 툴들을 이용하여 필요한 라이브러리를 잘 찾게끔 해놓으셨다고 해서 괜찮은것은 아닙니다.
특정상황, 어떤 플랫폼에서는 해당 빌드툴들을 이용할수 없는 상황도 있습니다.

질문하신분의 프로젝트를 돌리는데 해당 툴이 반드시 필요한것도 아니고요. 단지, 컴파일하는것 도와주는 툴일 뿐입니다.
따라서, cmake이든, 하물며 Visual Studio/Eclipse의 sln이나 dsp같은것이든 어떤것이든, 없으면 컴파일 못하는 상황을 만들면 안됩니다.

그냥 인수인계를 하실 때, 해당 프로그램의 명확한 build-requirement를 문서화해서 넘겨주세요.
그것으로 충분해야합니다.

가령,

#1. Qt-4.7 or above에, QtXML, QtOpenGL 모듈이 필요하다.
#2. OSG-X.X or above가 필요하다
#3. Any version of Bullet이 필요하다.
#4. Compiler Flag로 -fPIC와 -DGLIBC_ENABLED이 정의되어있어야한다.
#5. 기타등등

보통 저런 사항들은 INSTALL 이나 BUILD라는 이름의 문서 파일에 들어가죠.
그리고, cmake, autoconf, sln 등은 저런것들은 단지 특정 환경에서
저런것들을 자동으로 찾아주게끔 미리 만들어놓은 샘플 빌드 스크립트일뿐입니다.

저런상황만 명확하게 문서화시켜놨으면,
후임자는 어떤환경으로 포팅을 하든(OS X, MS Windows, Solaris, BSD)
어떤것이라도 자기가 작업하는 환경에 맞게 알아서 자신만의 빌드스크립트를 만들것입니다.

저런 부분이 간결하게 잘 정리되어있다면, 후임자가 자신의 환경에 맞게
sln이나 dsp로 포팅하는것은 손쉽게 할것입니다.(이해만 잘하고있으면, 5분안에 할지도)

따라서, 굳이 글쓰신분께서 직접 sln같은것 작성안해주셔도 충분할것입니다.

lithium81의 이미지

큰 도움이 되었습니다.

최소한, 말씀하신 build-requirement 문서를 가급적 자세하게 작성을 해둬야 하겠네요.

(그리 큰 규모는 아니니) 적어도 그렇게 해두기라도 하면 어찌저찌 될 것 같긴 합니다.

인수인계해줘야 하는 입장에서 무책임하다는 말은 듣고 싶지 않아서 가급적이면 편한 방법을 제공해주고 싶었는데, 게으르기도 하고 다른 일에도 치이고 하니... 배려하기가 어렵네요. ^^;;;

- 어제보다 나은 오늘, 오늘보다 나은 내일.

익명_사용자의 이미지

행여 후임자도 전산베이스가 아니고
build-requirement를 설명해놔도
뭔소린지 이해를 못하는 사람이라면

그냥 dsp나 sln을 작성해주셔야할듯..

제주변에서 그런분이 인수인계를 받는다면,
그냥 제대로된 프로그래머를 고용하라고 조언을 했을듯 하네요..

lithium81의 이미지

연구실인지라 돈 문제며 등등 해서 프로그래머까지 고용하기는 힘들어요.... ㅎㅎ

후임자도 전산베이스는 아닙니다만, 일단 나란히 붙어 앉아서 해보라고 하고 도와주던지, 같이 하던지 해야할 듯 싶어요.

그래도 시간이 좀 된다면 좀 제대로 된 방식으로 체계를 갖춰서 빌드 규칙을 짜놓고 싶긴 하네요...

- 어제보다 나은 오늘, 오늘보다 나은 내일.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.