
Provedor de dependência do CMake para o Gerenciador de pacotes Conan C e C ++.
cmake-conan . |
|---|
A integração cmake-conan nesta filial develop2 para Conan 2 usando provedores de dependência do CMAKE, mesmo que ainda não seja lançada como 1,0, é mais estável, pronta para produção e recomendada que o legado cmake-conan para Conan 1. Atualize o Conan 2 e a nova integração cmake-conan neste ramo develop2 . |
Pré -requisitos:
conanfile.txt ou conanfile.py para listar as dependências necessárias. Primeiro, clone este repositório na filial develop2 .
git clone https://github.com/conan-io/cmake-conan.git -b develop2 Este repositório contém um CMakeLists.txt com um projeto de exemplo que depende do fmt .
cd cmake-conan/example
mkdir build
cmake -B build -S . -DCMAKE_PROJECT_TOP_LEVEL_INCLUDES=../conan_provider.cmake -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release Verifique se você colocou um conanfile.txt ou conanfile.py na raiz do seu projeto, listando seus requisitos. Você pode ver Conanfile.txt para um exemplo ou verificar a documentação de Conan para conanfile : .txt docs, .py docs.
Ao invocar pela primeira vez o cmake para configurar o projeto, passa -DCMAKE_PROJECT_TOP_LEVEL_INCLUDES=[path-to-cmake-conan]/conan_provider.cmake . Isso garantirá que conan install seja invocada de dentro do CMake. Essa integração não requer alterações nos seus scripts CMakeLists.txt .
cd [your-project]
mkdir build
cmake -B build -S . -DCMAKE_PROJECT_TOP_LEVEL_INCLUDES=[path-to-cmake-conan]/conan_provider.cmake -DCMAKE_BUILD_TYPE=ReleaseCMakeDeps é especificado - para configurações de construção que, de outra forma, seriam fornecidas pelo CMakeToolchain (por exemplo, o próprio compilador ou outras configurações globais de construção), convoce Conan separadamente conforme documentação.find_package do CMAKE. Para dependências que têm lógica fora do find_package , por exemplo, fazendo chamadas diretas para find_program , find_library , find_path ou find_file , elas podem não funcionar corretamente.CMAKE_BUILD_TYPE válido (não pode ser deixado em branco) O provedor de dependência CMake-Conan criará um perfil Conan em que as configurações ( os , arch , compiler , build_type ) são recuperadas do que o CMake detectou para a compilação atual. Conan usa dois perfis para dependências, o host e os perfis de construção . Você pode ler mais sobre eles aqui. Em Cmake-Conan, o comportamento padrão é o seguinte:
default .default . Observe que, para o funcionamento acima, um perfil default já deve existir. Caso contrário, cmake-conan invocará o mecanismo de auto -tesecção de Conan, que tenta adivinhar o padrão do sistema.
Se você precisar personalizar o perfil, poderá fazê -lo modificando o valor de CONAN_HOST_PROFILE e CONAN_BUILD_PROFILE e passando -os como variáveis de cache cmake. Alguns exemplos:
-DCONAN_HOST_PROFILE="default;auto-cmake" : execute a autodetecção conforme descrito acima e fallback ao perfil padrão para qualquer outra coisa (comportamento padrão).-DCONAN_HOST_PROFILE=clang16 : não execute a autodetecção e use o perfil clang16 que deve existir na pasta Conan perfis (consulte os documentos.)-DCONAN_BUILD_PROFILE="/path/to/profile" : alternativamente, forneça um caminho para um arquivo de perfil que possa estar em qualquer lugar do sistema de arquivos.-DCONAN_HOST_PROFILE="default;custom" : Lista separada por Semi-Colon de perfis. Um perfil composto será usado (consulte os documentos) - compundado da esquerda para a direita, onde a direita tem a maior prioridade. O provedor de dependência CMake-Conan irá automatizar automaticamente as informações do perfil, conforme descrito acima. Se a invocação do comando conan install precisar ser personalizada ainda mais, a variável CONAN_INSTALL_ARGS poderá ser usada.
CONAN_INSTALL_ARGS é inicializado para passar --build=missing . Se você personalizar essa variável, esteja ciente de que Conan reverterá para seu comportamento padrão, a menos que você especifique o sinalizador --build .conanfile.txt|.py e o formato de saída ( --format ).--build=never;--update;--lockfile-out='' Existem alguns testes, você pode executar em Python, com pytest, por exemplo:
$ pytest -rA