C++ Conan 고급 완벽 가이드 | lockfile·크로스 빌드·사내 레포·프로덕션 패턴 [#53-4]

C++ Conan 고급 완벽 가이드 | lockfile·크로스 빌드·사내 레포·프로덕션 패턴 [#53-4]

이 글의 핵심

C++ Conan 2.x 고급 활용: lockfile 의존성 고정, 크로스 컴파일, 사내 Artifactory 연동, conanfile.py 레시피 작성. 시나리오 1: "어제까지 되던 빌드가 오늘 안 됨" 팀원 A가 conan install 후 빌드 에러가 난다고 합니다. Conan Center에서 패키지가 업데이트되면서 의존성 트리가 바뀌었고, fmt/10.1.1이 fmt/10.2.

들어가며: Conan 고급을 왜 배워야 하나요?

실제 겪는 문제 시나리오

시나리오 1: “어제까지 되던 빌드가 오늘 안 됨”
팀원 A가 conan install 후 빌드 에러가 난다고 합니다. Conan Center에서 패키지가 업데이트되면서 의존성 트리가 바뀌었고, fmt/10.1.1fmt/10.2.0으로 바뀌어 ABI 호환성이 깨졌습니다. “누가 버전을 바꿨나요?” — 아무도 없습니다. Conan이 최신 버전을 가져왔기 때문입니다.

시나리오 2: Version conflict — “A requires fmt/9.x, B requires fmt/10.x”
프로젝트가 spdlognlohmann_json을 쓰는데, 둘 다 fmt에 의존합니다. spdlogfmt/9.1.0, nlohmann_jsonfmt/10.1.1을 요구합니다. Conan이 “Version conflict” 에러를 던지고 빌드가 중단됩니다.

시나리오 3: CI에서 “find_package(fmt) could not find”
로컬에서는 빌드가 되는데 CI에서 실패합니다. “conan install을 먼저 실행했나요?” — CI 스크립트에 conan install 단계가 빠져 있거나, CMAKE_TOOLCHAIN_FILE 경로가 잘못되었습니다.

시나리오 4: 사내 라이브러리 배포
팀에서 만든 lib-core 라이브러리를 여러 프로젝트에서 사용합니다. 수동으로 복사·빌드·경로 설정을 하면 버전 관리가 어렵습니다. Conan을 사내 Artifactory에 연동해 lib-core/1.2.3처럼 패키지로 배포하고 싶습니다.

시나리오 5: 크로스 컴파일 — ARM 임베디드 빌드
x86_64 호스트에서 ARM 타겟용 빌드를 해야 합니다. Conan 프로필로 arch=armv7hf, compiler=gcc를 지정하면 되지만, Conan Center에 ARM 바이너리가 없는 패키지는 --build=missing으로 소스에서 빌드해야 합니다. 빌드 시간이 30분 이상 걸립니다.

시나리오 6: 의존성 해결이 너무 느림
conan install이 매번 5분 이상 걸립니다. Conan 캐시를 CI에 활용하지 않아, 매 빌드마다 패키지를 다시 다운로드·빌드합니다.

Conan 고급으로 해결:

  • lockfile: conan.lock으로 의존성 트리 고정 → 재현 가능한 빌드
  • override/requires: 버전 충돌 해결
  • 사내 레포: Artifactory·Conan Server 연동
  • 크로스 빌드: 프로필로 타겟 플랫폼 지정
  • CI 캐시: Conan 캐시 레이어로 빌드 시간 단축
flowchart TB
  subgraph Problems[문제]
    P1[버전 불일치]
    P2[CI 빌드 실패]
    P3[사내 라이브러리 배포]
    P4[크로스 컴파일]
  end

  subgraph Solutions[Conan 고급 해결]
    S1[lockfile]
    S2[프로필·빌드 스크립트]
    S3[사내 레포]
    S4[크로스 프로필]
  end

  P1 --> S1
  P2 --> S2
  P3 --> S3
  P4 --> S4

이 글에서 다루는 것

항목내용
lockfile의존성 트리 고정, 재현 가능한 빌드
conanfile.py 고급레시피 작성, 옵션, 조건부 의존성
크로스 빌드ARM, 임베디드, 프로필 작성
사내 레포Artifactory, Conan Server 연동
자주 발생하는 에러Version conflict, find_package 실패 등
프로덕션 패턴CI/CD, 캐시, 모범 사례

실무 적용 경험: 이 글은 대규모 C++ 프로젝트에서 실제로 겪은 문제와 해결 과정을 바탕으로 작성되었습니다. 책이나 문서에서 다루지 않는 실전 함정과 디버깅 팁을 포함합니다.

목차

  1. 환경 설정
  2. lockfile으로 의존성 고정
  3. conanfile.py 고급 레시피
  4. 크로스 컴파일
  5. 사내 레포지토리 연동
  6. 자주 발생하는 에러와 해결법
  7. 성능 최적화
  8. 프로덕션 패턴
  9. 구현 체크리스트

1. 환경 설정

필수 요구사항

항목버전비고
Conan2.xpip install conan
Python3.8+Conan 2.x 요구
CMake3.20+CMakeToolchain 사용 시
C++C++17 권장-

Conan 2.x 설치

# pip 권장 (가상환경 사용 권장)
pip install conan

# 버전 확인
conan --version
# Conan version 2.x.x

# 프로필 감지
conan profile detect --force

프로젝트 구조 (고급 예제용)

my-conan-advanced/
├── conanfile.py          # 또는 conanfile.txt
├── conan.lock            # lockfile (선택, 생성됨)
├── conan/
│   └── profiles/
│       ├── linux-gcc12
│       └── arm-gcc
├── CMakeLists.txt
├── src/
│   └── main.cpp
└── build/

2. lockfile으로 의존성 고정

문제: “어제는 됐는데 오늘 안 됨”

Conan은 conanfile.txtfmt/10.1.1처럼 버전을 지정해도, 의존성의 의존성은 범위로 해결될 수 있습니다. 예: spdlogfmt/[>=9.0]을 요구하면 Conan이 10.2.0을 선택할 수 있습니다. 이로 인해 빌드가 깨질 수 있습니다.

해결: conan.lock 생성

# lockfile 생성 — 의존성 트리 전체를 고정
conan lock create .

# conan.lock 파일이 생성됨

conan.lock에는 모든 의존성(직접·간접)의 정확한 버전과 해시가 기록됩니다. 이 파일을 Git에 커밋하면 팀 전체가 동일한 의존성으로 빌드합니다.

lockfile 사용

# lockfile 기반 설치
conan install . --output-folder=build --lockfile=conan.lock --build=missing

# lockfile 업데이트 (의존성 업그레이드 시)
conan lock create . --update

lockfile 업데이트 예시

# fmt 버전만 업그레이드
conan lock create . --update=fmt/10.2.0

# conanfile.txt에서 fmt/10.2.0으로 변경 후
conan lock create . --update

lockfile 다이어그램

flowchart LR
  subgraph Without[lockfile 없음]
    A1[conan install] --> A2[최신 버전 해결]
    A2 --> A3[팀원마다 다른 결과]
  end

  subgraph With[lockfile 있음]
    B1[conan.lock] --> B2[고정된 트리]
    B2 --> B3[동일한 빌드]
  end

3. conanfile.py 고급 레시피

3.1 완전한 conanfile.py 예제

from conan import ConanFile
from conan.tools.cmake import CMakeToolchain, CMakeDeps, cmake_layout
from conan.tools.build import check_min_cppstd
from conan.tools.scm import Version

class MyAppConan(ConanFile):
    settings = "os", "compiler", "build_type", "arch"
    generators = "CMakeDeps", "CMakeToolchain"

    def layout(self):
        cmake_layout(self)

    def requirements(self):
        self.requires("fmt/10.1.1")
        self.requires("spdlog/1.12.1")
        # override: fmt 버전 충돌 시 강제
        # self.requires("fmt/10.1.1", override=True)

    def build_requirements(self):
        # 테스트용 의존성 (build만)
        if self.tested_reference_str():
            self.test_requires("gtest/1.14.0")

    def configure(self):
        check_min_cppstd(self, "17")

    def generate(self):
        deps = CMakeDeps(self)
        deps.generate()
        tc = CMakeToolchain(self)
        tc.generate()

3.2 옵션(Options) 활용

from conan import ConanFile

class MyLibConan(ConanFile):
    settings = "os", "compiler", "build_type", "arch"
    options = {
        "shared": [True, False],
        "with_tests": [True, False],
        "with_ssl": [True, False],
    }
    default_options = {
        "shared": False,
        "with_tests": False,
        "with_ssl": True,
    }

    def requirements(self):
        self.requires("fmt/10.1.1")
        if self.options.get_safe("with_ssl", True):
            self.requires("openssl/3.2.0")

    def configure(self):
        if self.options.shared:
            self.options.rm_safe("fPIC")

사용:

# shared 라이브러리로 빌드
conan install . -o shared=True

# SSL 없이
conan install . -o with_ssl=False

3.3 조건부 의존성

def requirements(self):
    self.requires("fmt/10.1.1")
    if self.settings.os == "Linux":
        self.requires("libcurl/8.5.0")
    if self.settings.os == "Windows":
        self.requires("winhttp/1.0")  # 예시
    if Version(self.version) >= "2.0":
        self.requires("nlohmann_json/3.11.2")

3.4 패키지 레시피 (라이브러리 배포용)

from conan import ConanFile
from conan.tools.cmake import CMake, CMakeToolchain, cmake_layout
from conan.tools.files import copy

class MyLibConan(ConanFile):
    name = "mylib"
    version = "1.0.0"
    settings = "os", "compiler", "build_type", "arch"
    exports_sources = "CMakeLists.txt", "src/*"

    def layout(self):
        cmake_layout(self)

    def requirements(self):
        self.requires("fmt/10.1.1")

    def generate(self):
        tc = CMakeToolchain(self)
        tc.generate()

    def build(self):
        cmake = CMake(self)
        cmake.configure()
        cmake.build()

    def package(self):
        copy(self, "*.h", self.source_folder, self.package_folder / "include")
        copy(self, "*.a", self.build_folder, self.package_folder / "lib")
        copy(self, "*.lib", self.build_folder, self.package_folder / "lib")

    def package_info(self):
        self.cpp_info.libs = [mylib]
        self.cpp_info.includedirs = [include]

3.5 override로 버전 충돌 해결

def requirements(self):
    self.requires("spdlog/1.12.1")
    self.requires("nlohmann_json/3.11.2")
    # spdlog는 fmt/9.x, nlohmann_json은 fmt/10.x 요구 가능
    # fmt를 10.1.1로 강제
    self.requires("fmt/10.1.1", override=True)

4. 크로스 컴파일

ARM 프로필 예시

# conan/profiles/arm-gcc
[settings]
os=Linux
arch=armv7hf
compiler=gcc
compiler.version=11
compiler.libcxx=libstdc++11
build_type=Release

[env]
CC=arm-linux-gnueabihf-gcc
CXX=arm-linux-gnueabihf-g++
AR=arm-linux-gnueabihf-ar
STRIP=arm-linux-gnueabihf-strip

크로스 빌드 실행

# ARM 프로필 사용
conan install . --output-folder=build --profile=conan/profiles/arm-gcc --build=missing

# CMake에 cross-compile 설정 전달
cmake -B build -S . \
  -DCMAKE_TOOLCHAIN_FILE=build/conan_toolchain.cmake \
  -DCMAKE_SYSTEM_PROCESSOR=arm

Conan Center에 ARM 바이너리가 없는 경우

# 해당 패키지 소스에서 빌드
conan install . --profile=conan/profiles/arm-gcc --build=missing

# 특정 패키지만 빌드
conan install . --profile=conan/profiles/arm-gcc --build=fmt --build=spdlog

크로스 빌드 흐름

sequenceDiagram
  participant Dev as 개발자
  participant Conan as Conan
  participant Cache as Conan Center

  Dev->>Conan: conan install --profile=arm-gcc
  Conan->>Cache: ARM 바이너리 요청
  alt 바이너리 있음
    Cache-->>Conan: 제공
  else 없음
    Conan->>Conan: 소스 다운로드
    Conan->>Conan: arm-gcc로 빌드
  end
  Conan->>Dev: build/conan_toolchain.cmake

5. 사내 레포지토리 연동

Artifactory Conan 레포 추가

# Conan remote 추가
conan remote add mycompany https://mycompany.jfrog.io/artifactory/api/conan/conan-local

# remote 목록
conan remote list

# 사내 패키지 검색
conan search lib-core --remote=mycompany

conanfile.txt에서 사내 레포 지정

[requires]
fmt/10.1.1
lib-core/1.2.3

[generators]
CMakeDeps
CMakeToolchain
# 사내 패키지가 mycompany에 있으면 자동으로 해당 remote에서 가져옴
conan install . --output-folder=build --build=missing

패키지 업로드

# 빌드 후 업로드
conan create . lib-core/1.2.3@

# 사내 레포에 업로드
conan upload "lib-core/*" -r mycompany --all

remote 우선순위

# remote 순서 확인 (먼저 나오는 것이 우선)
conan remote list

# remote 순서 변경
conan remote remove mycompany
conan remote add mycompany https://... --insert=0

6. 자주 발생하는 에러와 해결법

에러 1: “Could NOT find a package configuration file provided by ‘fmt’”

증상:

CMake Error at ...: Could not find a package configuration file provided by "fmt"

원인: conan install을 실행하지 않았거나, CMAKE_TOOLCHAIN_FILE을 Conan이 생성한 conan_toolchain.cmake로 지정하지 않음.

해결법:

# 1. conan install 먼저 실행
conan install . --output-folder=build --build=missing

# 2. CMake에 toolchain 파일 지정
cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=$(pwd)/build/conan_toolchain.cmake

에러 2: “Version conflict”

증상:

ERROR: Version conflict: spdlog/1.12.1 requires fmt/9.1.0, nlohmann_json/3.11.2 requires fmt/10.1.1

해결법 1 — override:

# conanfile.py
def requirements(self):
    self.requires("spdlog/1.12.1")
    self.requires("nlohmann_json/3.11.2")
    self.requires("fmt/10.1.1", override=True)

해결법 2 — conanfile.txt:

[requires]
fmt/10.1.1
spdlog/1.12.1
nlohmann_json/3.11.2

Conan이 fmt/10.1.1을 우선으로 사용하도록 시도합니다. 여전히 충돌하면 conanfile.py로 전환.


에러 3: “conan_toolchain.cmake not found”

원인: conan install을 실행하지 않았거나, --output-folder 경로가 CMake와 다름.

해결법:

# output-folder를 build로 통일
conan install . --output-folder=build --build=missing
cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=build/conan_toolchain.cmake

에러 4: “Package ‘fmt/10.1.1’ not found”

원인: Conan Center에 해당 버전이 없거나, remote 설정 문제.

해결법:

# 패키지 검색
conan search fmt --remote=conancenter

# 사용 가능한 버전 확인
conan search fmt --remote=conancenter -q="*"

# remote 목록 확인
conan remote list

에러 5: “Build type mismatch”

증상: Debug로 빌드했는데 Release 라이브러리와 링크됨.

해결법:

# 프로필의 build_type 확인
conan profile show default

# Debug로 설치
conan install . --output-folder=build --build=missing -s build_type=Debug

에러 6: “CMake version not found” (Conan 2.x)

원인: Conan이 요구하는 CMake 버전이 시스템에 없음.

해결법:

# conanfile.py
def build_requirements(self):
    self.tool_requires("cmake/3.28.0")

에러 7: “Lockfile out of date”

증상: conan.lockconanfile.txt와 맞지 않음.

해결법:

# lockfile 재생성
conan lock create . --lockfile-out=conan.lock

7. 성능 최적화

CI 캐시 활용

# GitHub Actions 예시
- name: Cache Conan
  uses: actions/cache@v4
  with:
    path: ~/.conan2
    key: conan-${{ runner.os }}-${{ hashFiles('conanfile.*', 'conan.lock') }}

- name: Conan install
  run: conan install . --output-folder=build --lockfile=conan.lock --build=missing

바이너리 캐시 서버

# Artifactory 등에 바이너리 업로드
conan upload "*" -r mycompany --all

# CI에서 해당 remote에서 바이너리 다운로드 (빌드 없음)
conan install . --output-folder=build --lockfile=conan.lock

병렬 빌드

# Ninja로 병렬 빌드 (프로필에서 설정)
# conan/profiles/default
[conf]
tools.cmake.cmaketoolchain:generator=Ninja

8. 프로덕션 패턴

8.1 빌드 스크립트

#!/bin/bash
# build.sh
set -e

conan install . --output-folder=build --lockfile=conan.lock --build=missing
cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=build/conan_toolchain.cmake
cmake --build build

8.2 프로필 공유

conan/
├── profiles/
│   ├── linux-gcc12
│   ├── windows-msvc2022
│   └── arm-gcc
├── remotes.txt
└── README.md

팀원이 conan install . -pr=conan/profiles/linux-gcc12로 동일한 환경 사용.

8.3 의존성 업데이트 워크플로우

# 1. conanfile.txt에서 버전 업데이트
# 2. lockfile 재생성
conan lock create . --lockfile-out=conan.lock

# 3. 로컬 빌드 확인
conan install . --output-folder=build --lockfile=conan.lock --build=missing
cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=build/conan_toolchain.cmake
cmake --build build

# 4. conan.lock 커밋
git add conan.lock
git commit -m "chore: update dependencies"

8.4 모범 사례 요약

항목권장
버전fmt/10.1.1처럼 명시적 버전
lockfileconan.lock Git 커밋
프로필팀 공유 프로필 사용
CIConan 캐시 레이어 활용
사내 패키지Artifactory 등 remote 연동

8.5 완전한 프로젝트 예제

디렉터리 구조

my-conan-prod/
├── conanfile.txt
├── conan.lock
├── CMakeLists.txt
├── build.sh
├── conan/
│   └── profiles/
│       └── default
└── src/
    └── main.cpp

conanfile.txt (프로덕션용)

[requires]
fmt/10.1.1
spdlog/1.12.1
nlohmann_json/3.11.2

[generators]
CMakeDeps
CMakeToolchain

[options]
spdlog:shared=False
spdlog:wchar_support=False

CMakeLists.txt

cmake_minimum_required(VERSION 3.20)
project(my-conan-prod VERSION 1.0.0 LANGUAGES CXX)

add_executable(my-conan-prod src/main.cpp)

find_package(fmt REQUIRED)
find_package(spdlog REQUIRED)
find_package(nlohmann_json REQUIRED)

target_link_libraries(my-conan-prod PRIVATE
    fmt::fmt
    spdlog::spdlog
    nlohmann_json::nlohmann_json
)

target_compile_features(my-conan-prod PRIVATE cxx_std_17)

main.cpp

#include <spdlog/spdlog.h>
#include <fmt/core.h>
#include <nlohmann/json.hpp>

int main() {
    spdlog::info("Conan 프로덕션 예제");
    spdlog::info("fmt: {}", fmt::format("Hello, {}!", "Conan"));

    nlohmann::json j = {{"app", "my-conan-prod"}, {"version", "1.0.0"}};
    spdlog::info("JSON: {}", j.dump());

    return 0;
}

build.sh (빌드 스크립트)

#!/bin/bash
set -e

BUILD_DIR=build
PROFILE=${1:-conan/profiles/default}

echo "=== Conan install (profile: $PROFILE) ==="
conan install . --output-folder=$BUILD_DIR --lockfile=conan.lock --build=missing -pr=$PROFILE

echo "=== CMake configure ==="
cmake -B $BUILD_DIR -S . -DCMAKE_TOOLCHAIN_FILE=$BUILD_DIR/conan_toolchain.cmake

echo "=== CMake build ==="
cmake --build $BUILD_DIR

echo "=== Run ==="
./$BUILD_DIR/my-conan-prod

conan/profiles/default

[settings]
os=Linux
arch=x86_64
compiler=gcc
compiler.version=12
compiler.libcxx=libstdc++11
build_type=Release

[conf]
tools.cmake.cmaketoolchain:generator=Ninja

8.6 CI/CD 전체 예시

GitHub Actions

name: Build

on: [push, pull_request]

jobs:
  build:
    runs-on: ubuntu-22.04
    steps:
      - uses: actions/checkout@v4

      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.11'

      - name: Install Conan
        run: pip install conan

      - name: Cache Conan
        uses: actions/cache@v4
        with:
          path: ~/.conan2
          key: conan-${{ runner.os }}-${{ hashFiles('conanfile.*', 'conan.lock') }}

      - name: Conan install
        run: |
          conan profile detect --force
          conan install . --output-folder=build --lockfile=conan.lock --build=missing

      - name: CMake configure
        run: cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=build/conan_toolchain.cmake

      - name: CMake build
        run: cmake --build build

GitLab CI

build:
  image: ubuntu:22.04
  before_script:
    - apt-get update && apt-get install -y python3-pip cmake g++ ninja-build
    - pip install conan
    - conan profile detect --force
  script:
    - conan install . --output-folder=build --lockfile=conan.lock --build=missing
    - cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=build/conan_toolchain.cmake
    - cmake --build build
  cache:
    key: conan-$CI_COMMIT_REF_SLUG
    paths:
      - ~/.conan2

8.7 추가 에러 시나리오

에러 8: “Invalid configuration: compiler.version ‘12’ is not valid”

원인: 시스템에 설치된 GCC 버전이 프로필과 다름.

해결법:

# 설치된 컴파일러 확인
gcc --version

# 프로필 수정 또는 conan profile detect --force
conan profile detect --force

에러 9: “ERROR: Lockfile ‘conan.lock’ is outdated”

원인: conanfile.txt를 수정했지만 conan.lock을 업데이트하지 않음.

해결법:

conan lock create . --lockfile-out=conan.lock

에러 10: “Package binary missing” (크로스 빌드)

증상: ARM 프로필로 설치 시 “fmt/10.1.1: WARN: Binary missing” 후 소스 빌드 시도하다 실패.

해결법:

# tool_requires에 cmake 등 빌드 도구 명시
# conanfile.py
def build_requirements(self):
    self.tool_requires("cmake/3.28.0")

9. 구현 체크리스트

Conan 고급 사용 체크리스트

  • Conan 2.x 설치 (pip install conan)
  • conanfile.txt 또는 conanfile.py 작성
  • conan.lock 생성 및 Git 커밋 (conan lock create .)
  • conan installCMAKE_TOOLCHAIN_FILE 지정
  • 팀 프로필 공유 (conan/profiles/)
  • CI에서 Conan 캐시 활용
  • Version conflict 시 override 사용
  • 사내 패키지 사용 시 remote 추가

크로스 빌드 체크리스트

  • 타겟 프로필 작성 (arch, compiler, env)
  • --build=missing으로 소스 빌드
  • CMake CMAKE_SYSTEM_PROCESSOR 설정

사내 레포 체크리스트

  • Artifactory/Conan Server 설정
  • conan remote add 실행
  • 패키지 업로드 (conan upload)

정리

항목설명
lockfileconan lock create로 의존성 고정, 재현 가능한 빌드
conanfile.py옵션, 조건부 의존성, override
크로스 빌드프로필로 arch·compiler 지정
사내 레포Artifactory, conan remote add
에러find_package → toolchain, Version conflict → override

핵심 원칙:

  1. lockfile으로 의존성 고정
  2. 프로필 공유로 환경 일치
  3. CI 캐시로 빌드 시간 단축
  4. override로 버전 충돌 해결

자주 묻는 질문 (FAQ)

Q. lockfile을 언제 업데이트하나요?

A. 의존성 버전을 올릴 때 conan lock create . --update를 실행합니다. 보안 패치나 기능 추가가 필요할 때 주기적으로 진행합니다.

Q. 프로덕션에서 Conan 캐시는 어떻게 관리하나요?

A. CI에서 ~/.conan2를 캐시 레이어로 저장하고, conanfile.*·conan.lock 해시를 캐시 키로 사용합니다. Artifactory를 사용하면 바이너리 캐시 서버로 활용할 수 있습니다.

Q. vcpkg와 Conan은 같이 쓸 수 있나요?

A. 같은 프로젝트에서 둘 다 쓰는 것은 권장하지 않습니다. 의존성 충돌과 경로 혼란이 발생할 수 있습니다. 팀 규약으로 하나를 선택하는 것이 좋습니다.

Q. conanfile.txt vs conanfile.py 언제 뭘 쓰나요?

A. 단순 의존성만 선언하면 conanfile.txt로 충분합니다. 옵션, 조건부 의존성, 패키지 배포, 빌드 스크립트가 필요하면 conanfile.py를 사용하세요.

Q. Conan 1.x에서 2.x로 마이그레이션은?

A. Conan 2.x는 1.x와 호환되지 않습니다. conanfile.txt 형식은 비슷하지만, conan install 옵션과 프로필 형식이 다릅니다. Conan 2.0 마이그레이션 가이드를 참고하세요.


부록: conanfile.txt vs conanfile.py 선택 가이드

flowchart TD
  A[의존성 관리 필요] --> B{옵션/조건부 필요?}
  B -->|No| C[conanfile.txt]
  B -->|Yes| D[conanfile.py]
  A --> E{패키지 배포?}
  E -->|Yes| D
  E -->|No| B
  A --> F{빌드 스크립트?}
  F -->|Yes| D
  F -->|No| B
기준conanfile.txtconanfile.py
난이도낮음중~고
옵션[options] 섹션 제한적완전 제어
조건부 의존성불가가능
패키지 배포불가가능
빌드 스크립트불가build(), package()

참고 자료

한 줄 요약: lockfile·override·크로스 빌드·사내 레포로 Conan을 프로덕션 수준으로 활용할 수 있습니다.


관련 글

  • C++ Conan 기초 완벽 가이드 | 설치·conanfile·프로필·CMake 연동 [#53-4]
  • C++ Conan 레시피 작성 완벽 가이드 | 패키지·빌드·원격 저장소 [#53-4]
  • C++ vcpkg 고급 활용 | Manifest·Triplet·오버레이·바이너리 캐시 가이드
  • C++ Conan 완벽 가이드 | 현대적인 C++ 패키지 관리
... 996 lines not shown ... Token usage: 63706/1000000; 936294 remaining Start-Sleep -Seconds 3