CMake 를 이용해 third_party 링크관련 문의드립니다

4whomtbts의 이미지

안녕하세요! 컴퓨터공학과 재학중인 학부생입니다. 이번에 방학에 합의 알고리즘인 raft 알고리즘을
gRPC를 사용해서 구현하려고 합니다. 당연히 gRPC를 먼저 프로젝트에 넣어야하는데, CMake를 처음 배워서
여러 헷갈리는 부분이있습니다. 그리고 자바나 node 같이 빌드나 링킹을 신경쓰지 않은 안락한 환경에서만
프로그래밍을 해와서, C++ 의 빌드가 아리송하기만 합니다. 다행히도 이번 학기에 시스템소프트웨어를 배워서
링킹이나 라이브러리의 개념은 잘 알게되어서 용기를 얻을 수 있었는데요. 본론을 말씀드리면

gRPC를 git submodule로 추가해놓았습니다. shared library를 쓰지 않고 굳이 프로젝트에 포함하려고 하는
이유는 머신마다 gRPC 버전이 다르면 호환성 문제가 생길 수 있다고 생각했습니다(혹시 제가 이런 부분에서 잘 못 알고 있다면 가르침을 주시면 감사합니다 (_ _) ). 그리고 사실 큰 프로젝트로 하는게 아니고 토이프로젝트로 하는거라
프로젝트가 커질 일은 없겠지만, 대형 C++ 프로젝트는 이렇게 다른 라이브러리의 source 를 포함해놓고 빌드해서
사용하는 사례를 왕왕봐서 저도 한 번 해보고 싶었습니다.

프로젝트 ROOT
- 디렉터리 1
- 디렉터리 2
- third_party
- gRPC
=> gRPC repository 의 root (https://github.com/grpc/grpc)

빌드스크립트는 gradle 만 조금 써봐서 많이 혼란스러운데요.
질문을 조금 정리해보자면

1. 이러한 방식으로 하는게 통용되는?(말이되는?) 빌드 스트럭쳐인지 궁금합니다.
2. 구글링해본 결과 CMake에서 써드파티의 CMake를 트리거링 하는 별도의 방법은 제공하지 않는 것 같습니다
물론, execute_process 나 add_custom_command같은 CMake 함수를 사용해서 만들수야 있겠지만, 이러한
구조를 가진 프로젝트의 CMake를 읽어본결과 일반적으로 이런식으로 하지는 않는 것 같습니다.
루트프로젝트의 Makefile로만
써디파티들을 자동 빌드하고나서 링킹하고 루트프로젝트를 빌드할 수는 없는걸까요? 다른 방법으로 생각한 것은
쉘스크립트를 만들어서 써드파티들의 Makefile을 실행시키는 방법이 있다고 생각하는데, 주변에 조언구할 곳도
책도 없어서 너무 궁금합니다ㅜ..

위와 같은 경우에 빌드과정을 어떻게 조직해야하고 CMake는 어떻게 두어야할까요?

감사합니다! 크리스마스 잘 보내세요

svperbeast의 이미지

git submodule example이 있네요

“another approach is to add the gRPC source tree to your project as a git submodule. You can then add it to your CMake project with add_subdirectory().”

https://github.com/grpc/grpc/blob/master/examples/cpp/helloworld/CMakeLists.txt

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.