레이블이 cmake인 게시물을 표시합니다. 모든 게시물 표시
레이블이 cmake인 게시물을 표시합니다. 모든 게시물 표시

2023년 12월 31일 일요일

Cmake external project 예제

github 등 외부 URL 의 cmake project 를 다운받아 빌드 수행


참고: CMake ExternalProject module


예제

https://github.com/bjtj/tjsamples/tree/main/cmake/external-project

  • github 에 올라간 osl-c (cmake project) 를 불러와 사용하기


CMakeLists.txt 일부분


include(ExternalProject)
ExternalProject_Add(oslc
  GIT_REPOSITORY    https://github.com/bjtj/osl-c.git
  GIT_TAG           1.0.0
  EXCLUDE_FROM_ALL  TRUE
  BUILD_COMMAND     cmake --build .
  STEP_TARGETS      build
)


설명:

  • BUILD_COMMAND cmake --build 로 설정하면 cross platform 하게 빌드를 수행
    • powershell (windows), bash shell (linux) 에서 동일하게 cmake --build <dir> 로 빌드 수행 가능하여 편리함
    • cmake project 가 아니라면 manual 하게 따로 설정해야함 (e.g. autoconf)


set(oslc_BINARY_DIR "${CMAKE_BINARY_DIR}/oslc-prefix/src/oslc-build")
set(oslc_SOURCE_DIR "${CMAKE_BINARY_DIR}/oslc-prefix/src/oslc/src")
add_dependencies(hello oslc-build)

if(UNIX AND NOT APPLE)
  target_link_libraries(hello ${oslc_BINARY_DIR}/libosl.so)
endif()

if(MSVC)
  target_link_libraries(hello ${oslc_BINARY_DIR}/Debug/osl.lib)
  add_custom_command(TARGET hello POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy_if_different
      "${oslc_BINARY_DIR}/Debug/osl.dll"
      $<TARGET_FILE_DIR:hello>)
endif()

target_include_directories(hello PUBLIC ${oslc_SOURCE_DIR})


설명:

  • 주의) 예제의 oslc 를 실제 사용하는 라이브러리로 수정할 것
  • 빌드 수행 결과물을 link 해 줘야 함
    • LINUX 는 .so 파일을 링크
      • if(UNIX AND NOT APPLE)
          target_link_libraries(hello ${oslc_BINARY_DIR}/libosl.so)
        endif()

         
    • MSVC 는 .lib 파일을 링크 + 빌드 수행 후 .dll 파일을 결과 폴더에 복사
      • if(MSVC)
          target_link_libraries(hello ${oslc_BINARY_DIR}/Debug/osl.lib)
          add_custom_command(TARGET hello POST_BUILD
            COMMAND ${CMAKE_COMMAND} -E copy_if_different
              "${oslc_BINARY_DIR}/Debug/osl.dll"
              $<TARGET_FILE_DIR:hello>)
        endif()



2018년 3월 29일 목요일

cmake

cmake


소개 


cross-platform 빌드 및 테스트, 패키징 프로그램
빌드 수행하는 host machine 에서 수행 가능한 빌드 시스템 생성 방식

생성 가능한 빌드 시스템들


cmake


tutorial



Hello World


준비물


CMakeLists.txt:

project (hello)
add_executable (hello hello.c)


hello.c:

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    printf("hello\n");
    return 0;
}


빌드


$ mkdir build
$ cd build
$ cmake ..
$ make

실행


$ ./hello
hello



예제 소스 (github)