CMake "Variables"에서 CMAKE_AUTOGEN_ORIGIN_DEPENDS 프로그래밍: 심층 분석

2024-04-02

CMake 변수 CMAKE_AUTOGEN_ORIGIN_DEPENDS 설명

  • CMAKE_AUTOGEN_ORIGIN_DEPENDS는 CMake 3.14 버전에서 도입된 변수입니다.
  • _autogen 타겟에 원본 타겟의 종속성을 전달하는 것을 제어합니다.
  • 기본값은 ON이며, 이는 _autogen 타겟이 빌드될 때 원본 타겟의 모든 종속성도 빌드된다는 것을 의미합니다.
  • CMAKE_AUTOGEN_ORIGIN_DEPENDSOFF로 설정하면 _autogen 타겟만 빌드할 때 원본 타겟의 종속성은 빌드되지 않습니다.
  • AUTOGEN_TARGET_DEPENDS를 사용하여 _autogen 타겟에 특정 종속성을 추가할 수 있습니다.

사용 예시:

# 원본 타겟 정의
add_library(my_lib ...)

# _autogen 타겟 정의
add_custom_command(
  TARGET my_lib_autogen
  COMMAND ...
)

# CMAKE_AUTOGEN_ORIGIN_DEPENDS를 이용하여 _autogen 타겟에 my_lib 종속성 전달
set(CMAKE_AUTOGEN_ORIGIN_DEPENDS ON)
add_custom_target(my_lib_autogen_all
  DEPENDS my_lib_autogen
)

주의 사항:

  • AUTOGEN_TARGET_DEPENDS를 사용하여 누락된 종속성을 명시적으로 추가해야 합니다.

추가 정보:

  • CMAKE_AUTOGEN_ORIGIN_DEPENDS는 Qt와 같은 특정 프레임워크와 함께 사용할 때 유용합니다.
  • Qt는 moc, uic, rcc와 같은 자동 코드 생성 도구를 사용합니다.
  • 이러한 도구는 _autogen 타겟에 의해 생성된 헤더 파일을 사용하여 코드를 생성합니다.
  • CMAKE_AUTOGEN_ORIGIN_DEPENDSON으로 설정하면 _autogen 타겟이 빌드될 때 자동으로 생성된 헤더 파일을 포함하는 모든 종속성도 빌드됩니다.

질문:

  • CMAKE_AUTOGEN_ORIGIN_DEPENDS에 대해 더 궁금한 점이 있으면 질문해주세요.


CMake 예제 코드: CMAKE_AUTOGEN_ORIGIN_DEPENDS 사용

# 예제 코드: CMAKE_AUTOGEN_ORIGIN_DEPENDS 사용

# 원본 타겟 정의
add_library(my_lib
  SRC main.c
  )

# _autogen 타겟 정의
add_custom_command(
  TARGET my_lib_autogen
  COMMAND ${CMAKE_COMMAND} -E copy_if_different
    ${CMAKE_CURRENT_SOURCE_DIR}/my_header.h
    ${CMAKE_BINARY_DIR}/my_header.h
  )

# CMAKE_AUTOGEN_ORIGIN_DEPENDS를 이용하여 _autogen 타겟에 my_lib 종속성 전달
set(CMAKE_AUTOGEN_ORIGIN_DEPENDS ON)
add_custom_target(my_lib_autogen_all
  DEPENDS my_lib_autogen
)

# my_lib 타겟이 _autogen 타겟에 종속됨을 확인
add_dependencies(my_lib my_lib_autogen)

# 빌드
target_link_libraries(my_lib ...)
add_executable(my_app main.c)
target_link_libraries(my_app my_lib)

# 실행
./my_app
  • 이 예제 코드는 my_lib라는 라이브러리 타겟과 my_lib_autogen이라는 _autogen 타겟을 정의합니다.
  • _autogen 타겟은 my_header.h 헤더 파일을 CMAKE_BINARY_DIR 디렉토리로 복사하는 커스텀 명령을 실행합니다.
  • CMAKE_AUTOGEN_ORIGIN_DEPENDSON으로 설정하여 _autogen 타겟이 빌드될 때 my_lib 타겟도 빌드되도록 합니다.
  • my_lib 타겟은 my_header.h 헤더 파일에 종속되므로 _autogen 타겟이 빌드되어 헤더 파일이 업데이트될 때 my_lib 타겟도 다시 빌드됩니다.

빌드 및 실행:

  • 이 코드를 CMakeLists.txt 파일로 저장하고 CMake를 사용하여 빌드합니다.
  • 빌드가 성공하면 my_app 실행 파일이 생성됩니다.
  • my_app 실행 파일을 실행하면 my_lib 라이브러리가 사용됩니다.

참고:

  • 이 예제 코드는 C언어를 사용하지만 다른 언어에도 적용할 수 있습니다.


CMAKE_AUTOGEN_ORIGIN_DEPENDS 대체 방법

add_dependencies 명령 사용:

add_dependencies(my_lib_autogen my_lib)

이 명령은 my_lib_autogen 타겟이 빌드될 때 my_lib 타겟도 빌드되도록 합니다.

CUSTOM_COMMAND의 DEPENDS 옵션 사용:

add_custom_command(
  TARGET my_lib_autogen
  COMMAND ...
  DEPENDS my_lib
)

이 명령은 my_lib_autogen 타겟이 빌드될 때 my_lib 타겟이 먼저 빌드되도록 합니다.

AUTOGEN_TARGET_DEPENDS 속성 사용:

set_property(TARGET my_lib_autogen APPEND PROPERTY AUTOGEN_TARGET_DEPENDS my_lib)

이 명령은 my_lib_autogen 타겟에 my_lib 타겟을 종속성으로 추가합니다.

주의 사항:

  • 위의 방법은 CMAKE_AUTOGEN_ORIGIN_DEPENDS 변수를 사용하는 것보다 덜 명확할 수 있습니다.
  • 사용하는 방법은 프로젝트의 특성에 따라 다릅니다.



CMake에서 target_link_libraries() 함수 활용: 완벽한 가이드

함수 기본 구조:주요 파라미터:<타겟 이름>: 링크를 설정할 타겟의 이름입니다.PUBLIC | PRIVATE | INTERFACE: 링크 유형을 지정합니다. PUBLIC: 타겟을 사용하는 다른 타겟에서도 해당 라이브러리에 대한 의존성이 명시됩니다



CMake의 "Commands"와 관련된 "ctest_upload()" 프로그래밍

ctest_upload() 함수 사용 방법:CMakeLists. txt 파일에 ctest_upload() 함수를 추가합니다.함수의 첫 번째 인수는 업로드할 결과 파일의 경로를 지정합니다.두 번째 인수는 서버의 URL을 지정합니다


CMake의 "Commands"와 관련된 "source_group()" 사용법: 코드 작성 및 그룹화

source_group() 명령에는 두 가지 서로 다른 형식이 있습니다.1. 개별 파일 그룹화이 형식은 지정된 이름으로 그룹을 만들고 그룹에 포함될 소스 파일을 개별적으로 나열하거나 정규 표현식을 사용하여 일치하는 파일을 자동으로 추가합니다


CMake에서 CUDA 아키텍처 설정하기

CUDAARCHS 설정 방법CUDAARCHS는 다음과 같은 방법으로 설정할 수 있습니다.CMakeLists. txt 파일:명령행:CUDAARCHS의 작동 방식CMake는 CUDAARCHS 변수에 지정된 아키텍처마다 별도의 컴파일 작업을 수행합니다


CMake 매뉴얼 언어 프로그래밍

CMake 매뉴얼 언어는 다음과 같은 프로그래밍 요소를 사용하여 프로젝트 빌드를 구성합니다.변수는 CMakeLists. txt 파일에서 값을 저장하고 사용하는 데 사용됩니다. 변수는 프로젝트 경로, 소스 파일 목록



CMake에서 테스트 결과 평가: "PASS_REGULAR_EXPRESSION" 심층 분석

기본 구문:my_test: 테스트 이름정규 표현식: 테스트 결과 문자열에서 일치해야 하는 패턴사용 예시:테스트 출력에 특정 문구가 포함된 경우 성공:테스트 종료 코드가 0인 경우 성공:여러 조건을 OR 연산자로 연결:


CMake Variables: CMAKE_WARN_DEPRECATED 프로그래밍

기본값:ON: 기본적으로 CMAKE_WARN_DEPRECATED는 ON으로 설정되어 있어 더 이상 사용되지 않는 기능 사용 시 경고 메시지를 표시합니다.OFF: CMAKE_WARN_DEPRECATED를 OFF로 설정하면 경고 메시지가 표시되지 않습니다


CMake "add_custom_target()" 프로그래밍

사용법:인자:<이름>: 타겟 이름[ALL]: make 또는 make all 명령에서 기본 빌드 대상에 포함할지 여부 (선택 사항)[<출력_메시지>]: 명령 실행 전에 콘솔에 출력할 메시지 (선택 사항)COMMAND <명령>: 실행할 명령


CMake Policy CMP0096: 프로젝트 버전 관리

CMake는 프로젝트 구축을 위한 강력한 도구이며, 다양한 옵션과 정책을 통해 사용자 정의가 가능합니다. Policy CMP0096은 프로젝트 버전 관리에 영향을 미치는 중요한 정책입니다.버전 문자열 처리CMake 3.16 이전 버전에서는 project 명령어에 지정된 버전 문자열에서 앞쪽 0을 제거했습니다


CMake에서 Variables와 관련된 CMAKE_ERROR_DEPRECATED 프로그래밍

"Variables" 사용변수 선언:변수 사용:"CMAKE_ERROR_DEPRECATED"사용 이유: 더 이상 사용되지 않는 변수나 기능을 사용하는 경우 코드 호환성 문제를 일으킬 수 있습니다. 개발자는 코드를 업데이트하고 새로운 API를 사용하도록 권장됩니다