如何选择 Ninja 作为 Conan 的 CMake 生成器?

2024-01-10

在尝试按照柯南的入门指南创建包时,我在尝试运行时遇到了困难conan create . demo/testing。它不断尝试使用MinGW Makefiles作为 CMake 生成器,但我想使用 Ninja 代替。

我的食谱如下:

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


class HelloConan(ConanFile):
    name = "hello"
    version = "0.1"

    # Optional metadata
    license = "<Put the package license here>"
    author = "<Put your name here> <And your email here>"
    url = "<Package recipe repository url here, for issues about the package>"
    description = "<Description of Hello here>"
    topics = ("<Put some tag here>", "<here>", "<and here>")

    # Binary configuration
    settings = "os", "compiler", "build_type", "arch"
    options = {"shared": [True, False], "fPIC": [True, False]}
    default_options = {"shared": False, "fPIC": True}

    # Sources are located in the same place as this recipe, copy them to the recipe
    exports_sources = "CMakeLists.txt", "src/*", "include/*"

    def config_options(self):
        if self.settings.os == "Windows":
            del self.options.fPIC

    def layout(self):
        cmake_layout(self)

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

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

    def package(self):
        cmake = CMake(self)
        cmake.install()

    def package_info(self):
        self.cpp_info.libs = ["hello"]

在 vcvars64.bat 环境中运行时的输出:

D:\microsoft_visual_studio\2022\Preview\VC\Auxiliary\Build>vcvars64.bat
**********************************************************************
** Visual Studio 2022 Developer Command Prompt v17.2.0-pre.1.0
** Copyright (c) 2022 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64'
D:\Programming\hellopkg>conan create . demo/testing
Exporting package recipe
hello/0.1@demo/testing exports_sources: Copied 1 '.txt' file: CMakeLists.txt
hello/0.1@demo/testing exports_sources: Copied 1 '.cpp' file: hello.cpp
hello/0.1@demo/testing exports_sources: Copied 1 '.h' file: hello.h
hello/0.1@demo/testing: The stored package has not changed
hello/0.1@demo/testing: Exported revision: 4fc80e430f8244be40256fab755f8c43
Configuration:
[settings]
arch=x86_64
arch_build=x86_64
build_type=Release
compiler=clang
compiler.libcxx=libstdc++
compiler.version=13
os=Windows
os_build=Windows
[options]
[build_requires]
[env]
CC=D:/microsoft_visual_studio/2022/Preview/VC/Tools/Llvm/x64/bin/clang.exe
CXX=D:/microsoft_visual_studio/2022/Preview/VC/Tools/Llvm/x64/bin/clang++.exe
hello/0.1@demo/testing: Forced build from source
hello/0.1@demo/testing (test package): Installing package
Requirements
    hello/0.1@demo/testing from local cache - Cache
Packages
    hello/0.1@demo/testing:e12ca8b919921eecef92b328d38021194388175a - Build

Installing (downloading, building) binaries...
hello/0.1@demo/testing: WARN: Build folder is dirty, removing it: C:\Users\Zantox\.conan\data\hello\0.1\demo\testing\build\e12ca8b919921eecef92b328d38021194388175a
hello/0.1@demo/testing: Copying sources to build folder
hello/0.1@demo/testing: Building your package in C:\Users\Zantox\.conan\data\hello\0.1\demo\testing\build\e12ca8b919921eecef92b328d38021194388175a
hello/0.1@demo/testing: Generator txt created conanbuildinfo.txt
hello/0.1@demo/testing: Calling generate()
hello/0.1@demo/testing: WARN: Using the new toolchains and generators without specifying a build profile (e.g: -pr:b=default) is discouraged and might cause failures and unexpected behavior
hello/0.1@demo/testing: Aggregating env generators
hello/0.1@demo/testing: Calling build()
hello/0.1@demo/testing: CMake command: cmake -G "MinGW Makefiles" -DCMAKE_TOOLCHAIN_FILE="C:/Users/Zantox/.conan/data/hello/0.1/demo/testing/build/e12ca8b919921eecef92b328d38021194388175a/cmake-build-release/conan/conan_toolchain.cmake" -DCMAKE_INSTALL_PREFIX="C:/Users/Zantox/.conan/data/hello/0.1/demo/testing/package/e12ca8b919921eecef92b328d38021194388175a" -DCMAKE_SH="CMAKE_SH-NOTFOUND" "C:\Users\Zantox\.conan\data\hello\0.1\demo\testing\build\e12ca8b919921eecef92b328d38021194388175a\."
-- Using Conan toolchain: C:/Users/Zantox/.conan/data/hello/0.1/demo/testing/build/e12ca8b919921eecef92b328d38021194388175a/cmake-build-release/conan/conan_toolchain.cmake
-- Conan toolchain: Setting BUILD_SHARED_LIBS = OFF
-- The CXX compiler identification is Clang 13.0.0 with GNU-like command-line
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: D:/microsoft_visual_studio/2022/Preview/VC/Tools/Llvm/x64/bin/clang++.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done

The wiki https://docs.conan.io/en/1.44/integrations/build_system/ninja.html指定设置柯南设置cmake_generator to Ninja像这样:

$ conan config set general.cmake_generator=Ninja

我已经确认此设置现在在我的conan.conf文件下的[general]类别,但似乎没有效果。与CONAN_CMAKE_GENERATOR环境变量。

我尝试将配方的构建部分更改为:

def build(self):
    cmake = CMake(self, generator="Ninja")
    cmake.configure()
    cmake.build()

但这只会在尝试运行时出现此错误:

ERROR: hello/0.1@demo/testing: Error in build() method, line 36
        cmake = CMake(self, generator="Ninja")
        TypeError: __init__() got an unexpected keyword argument 'generator'

作为参考,我使用的是Python版本3.10.1以及柯南版1.46.0


您正在按照方法签名来CMake https://docs.conan.io/en/latest/reference/build_helpers/cmake.html#constructor直接从导入的助手conans。但是,您导入了新的CMake https://docs.conan.io/en/latest/reference/conanfile/tools/cmake/cmake.html为柯南2.0设计的助手。它们是不相容的。

您可以保留新的助手,但您需要在中定义生成器conanbuild.conf。 (尚未记录)

不过,您也可以直接在您的CMake工具链 https://docs.conan.io/en/latest/reference/conanfile/tools/cmake/cmaketoolchain.html#constructor构造函数:

tc = CMakeToolchain(self, generator="Ninja")

但它很无聊并且硬编码在您的食谱中,因此作为替代方案,您可以直接在您的食谱中配置它全局配置文件 https://docs.conan.io/en/latest/reference/config_files/global_conf.html file.

echo tools.cmake.cmaketoolchain:generator=Ninja >> %USERPROFILE%\.conan\global.conf

这些功能是实验性的,应该很快就会得到改进,因为它们将成为 Conan 2.0 的标准。如果行为发生变化,请阅读文档。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何选择 Ninja 作为 Conan 的 CMake 生成器? 的相关文章

  • 更新面板工作速度非常慢

    我正在编写一个用户可以注册的应用程序 注册时 可以选择多个选项 并根据这些注册字段可见或不可见以及是否必需 我想出了一个想法 所有字段都将位于 updatePanel 中 当用户更改注册选项时 我将在服务器端设置这些字段的可见性 它可以工作
  • 在 CPP 类中将 C 函数声明为友元

    我需要在 C 函数中使用类的私有变量 我正在做这样的事情 class Helper private std string name public std getName return name friend extern C void in
  • 将类对象放置在向量中?

    我注意到我可以将一个类放置在一个向量中 这是我的程序 我收到以下错误 out blackjack exe blackjack obj blackjack obj error LNK2019 unresolved external symbo
  • MVC3中设置下拉列表中的所选项目

    我必须为视图中的下拉列表设置所选项目 但它不起作用 View div class editor label Html LabelFor model gt model Gender div div class editor field Htm
  • 传递 constexpr 对象

    我决定给予新的C 14的定义constexpr旋转并充分利用它 我决定编写一个小的编译时字符串解析器 然而 我正在努力保持我的对象constexpr将其传递给函数时 考虑以下代码 include
  • 如何将 .txt 文件中的数据转换为 xml? C#

    我在一个文本文件中有数千行数据 我想通过将其转换为更容易搜索的内容来轻松搜索 我希望 XML 或其他类型的大型数据结构 尽管我不确定它是否是最好的对于我的想法 每行的数据如下所示 第 31 册 托马斯 乔治 32 34 154 每本书都不是
  • 获取没有显式特征的整数模板参数的有符号/无符号变体

    我希望定义一个模板类 其模板参数始终是整数类型 该类将包含两个成员 其中之一是类型T 另一个作为类型的无符号变体T 即如果T int then T Unsigned unsigned int 我的第一直觉是这样做 template
  • 在 VS 中运行时如何查看 C# 控制台程序的输出?

    我刚刚编写了一个名为 helloworld 的聪明程序 它是一个 C NET 4 5 控制台应用程序 在扭曲的嵌套逻辑迷宫深处 使用了 Console WriteLine 当我在命令行运行它时 它会运行并且我会看到输出 我可以执行其他命令并
  • 在 .NET MAUI 中实现 TouchTracking

    我一直致力于将我们的应用程序从 Xamarin Forms 迁移到 NET MAUI 我们的应用程序几乎没有绘图功能 用户可以用手指进行绘图 我们用了TouchTrackingXamarin Forms 中的 nuget 包 但与 NET
  • 不可变类与结构

    以下是类与 C 中的结构的唯一区别 如果我错了 请纠正我 类变量是引用 而结构变量是值 因此在赋值和参数传递中复制结构的整个值 类变量是存储在堆栈上的指针 指向堆上的内存 而结构变量作为值存储在堆上 假设我有一个不可变的结构 该结构的字段一
  • 在 C# 中为父窗体中的子窗体控件添加事件处理程序

    我有两种形式 一种是带有按钮和文本框的父表单 单击该按钮时 将打开一个对话框 该子窗体又包含一个文本框和一个按钮 现在我想要的是 每当子表单文本框中的文本更改时 父表单文本框中的文本会自动更改 为了获得这个 我所做的是 Form3 f3 n
  • 将 Word 转换为 PDF - 禁用“保存”对话框

    我有一个用 C 编写的 Word 到 PDF 转换器 除了一件事之外 它工作得很好 有时 在某些 Word 文件上 后台会出现一条消息保存源文件中的更改 gt 是 否 取消 但我没有对源文件进行任何更改 我只想从 Word 文件创建 PDF
  • 模板类的模板构造函数的 C++ 显式模板特化

    我有一个像这样的课程 template
  • 将 Lambda 表达式树与 IEnumerable 结合使用

    我一直在尝试了解有关使用 Lamba 表达式树的更多信息 因此我创建了一个简单的示例 这是代码 如果作为 C 程序粘贴到 LINQPad 中 它可以工作 void Main IEnumerable
  • 代码中的.net Access Forms身份验证“超时”值

    我正在向我的应用程序添加注销过期警报 并希望从我的代码访问我的 web config 表单身份验证 超时 值 我有什么办法可以做到这一点吗 我认为您可以从 FormsAuthentication 静态类方法中读取它 这比直接读取 web c
  • Visual Studio 2015 - Web 项目上缺少共享项目参考选项卡

    我从 MSDN 订阅升级到 Visual Studio 2015 因为我非常兴奋地阅读有关共享项目的信息 当我们想要做的只是重用代码时 不再需要在依赖项中管理 21382 个 nuget 包 所以我构建了一个测试共享项目 其中包含一些代码
  • C++:二叉树所有节点值的总和

    我正在准备面试 我被一个二叉树问题困住了 我们如何计算二叉树所有节点中存在的值的总和 优雅的递归解决方案 伪代码 def sum node if node NULL return 0 return node gt value sum nod
  • CMake 创建可执行文件时未定义的引用

    我是 CMake 新手 我正在尝试编译我的项目 该项目创建了一些静态库和一些可执行文件 下面是我拥有的文件结构的示例 PROJECT SRC 子项目 1该文件夹的 cpp 所有源文件 和CMakeLists txt 1 创建静态库 子项目
  • 无法将字符串文字分配给装箱的 std::string 向量

    这是我的类型系统的简化版本 include
  • 为什么空循环使用如此多的处理器时间?

    如果我的代码中有一个空的 while 循环 例如 while true 它将把处理器的使用率提高到大约 25 但是 如果我执行以下操作 while true Sleep 1 它只会使用大约1 那么这是为什么呢 更新 感谢所有精彩的回复 但我

随机推荐

  • Nodejs 加密模块与 crypto-js

    我对 NodeJs 很陌生 并试图弄清楚如何使用 加密 模块 在使用它时 我注意到 NodeJs 和 crypto js 中的 crypto 模块之间的区别 使用 crypto js 我有 function SHA256Hash passw
  • 如何将文本文件的内容插入到 SQL Server 中的表中

    我有几个文件 它们是 XML 但这并不重要 需要插入到现有的 SQL 表中 即我没有设计它 该表如下所示 ReportType ID int lt identity Name varchar 32 TransformXSLT nvarcha
  • 如何将一个 DIV 重叠到其他 DIV 上?

    我正在尝试将 DIV 重叠到其他视觉上 我在尝试 position absolute top 10px 在css中 但我发现这个top属性在firefox中无法正常工作 亲爱的小伙伴们 请问该怎么做呢 请帮助我一些代码或示例 提前谢谢 这是
  • AnimatedContainer 调整高度时出现溢出警告

    Example https gfycat com AdventurousOblongGoa 使用 CupertinoPicker 我希望它使用 AnimatedContainer 以动画方式进入文本输入下方的视图 但是当它变得可见时 我收到
  • 如何将设置对象从控制器传递到服务?

    tl dr 我需要传达多个服务所需的状态 这些状态源自绑定到控制器范围的数据 有什么好的 Angular zen 方式可以做到这一点 背景故事 我正在开发一个单页应用程序 经过深思熟虑后决定使用 AngularJS 页面的布局方式类似于 实
  • “指向 int 的指针”和“指向 int 数组的指针”之间的区别

    int main int x 5 pointer to an array of integers int y 6 1 2 3 4 5 6 array of integers int z pointer to integer z y for
  • Bootstrap DatetimePicker 选择器问题

    我在用eonasdan 的 bootstrap 3 日期时间选择器 http eonasdan github io bootstrap datetimepicker 我只是想知道是否可以使用输入字段以及日历字形打开选择器 我知道如何使用输入
  • 构建支持 X 的 Emacs

    我正在尝试在 64 位上构建支持 X 的 Emacs 24 0 94SUSE Linux https en wikipedia org wiki SUSE Linux 10 2 企业发布 框 我看到 X11 库安装在 usr lib X11
  • 如何让 PDO 在 PHP 5.4 的 WAMP 上工作?

    如何让 PDO 在 PHP 5 4 的 WAMP 上工作 我已经在 WAMP 2 2d 32 位 中安装了 PHP 5 4 我的 PHP ini 文件已启用它 在 5 4 phpForApache ini 文件内 我下载了最新的 Windo
  • AttributeError:“重试”对象没有属性“method_whitelist”

    尝试运行代码时发生以下错误 Traceback most recent call last response session post base url params query filename query File usr local
  • Core Data 中一对多关系的属性声明

    我有一个使用 Core Data 编写的应用程序 我有 2 个具有一对多关系的实体 我为它们都创建了 NSManagedObject 子类 一侧的实体称为播放列表 另一侧的实体称为歌曲 播放列表界面 interface VBPlaylist
  • 浏览器对 HTML5 输入 type=url 使用什么正则表达式?

    我正在研究 HTML5 输入模式 polyfill 并尝试在 JavaScript 中验证输入 type url 就像浏览器 Chrome 所做的那样 但找不到任何有关 JavaScript 或 PERL 兼容正则表达式的文档 由于它是一个
  • 从C++类继承NSObject

    我很喜欢我的 C 类 但我真的希望它能进入表格视图 有没有办法从标准 C 类继承 NSObject 这就是我试图做的 class Model NSObject public NSString key 编译器一点也不喜欢它 它告诉我基说明符必
  • 使用正则表达式查找字符串中特定文本后的数字

    我有一个多行字符串 如下所示 2012 15 08 07 04 Bla bla bla blup 2012 15 08 07 05 Error importing row no 5 The import of this line faile
  • $getJSON 和 for 循环问题

    这是用 MediaWiki API 查询返回的结果量填充表 api php action query list querypage qppage BrokenRedirects 然后将结果数添加到 id 中 例如 BrokenRedirec
  • 如何以computeIfAbsent效率实现Map putIfAbsent语义?

    考虑以下代码 ConcurrentHashMap
  • 删除标题栏 Phonegap

    如何删除在phonegap构建中应用程序启动时显示一秒钟左右的标题栏 我尝试全屏显示 如图所示Phonegap 删除开始时的标题栏 https stackoverflow com questions 19765825 phonegap re
  • 如何在本地托管 .Net Bot 应用程序

    我们有一个客户要求 即 Bot 应用程序应托管在本地 并且所有网络聊天通信都直接进入网络服务器 我计划开发一个 Bot Net 应用程序并配置网络聊天频道 我想知道是否可以在本地配置 Bot 应用程序 如何在本地设置网络聊天 如何跳过机器人
  • 强制 Laravel 使用 HTTPS 版本

    我有一个 Laravel 网站 我正在尝试使用 SSL 来完成所有工作 尽管 Laravel 似乎想使用 http 来代替 例如我正在使用form元素和方法自动发送到http 使用内置的同样的事情style script我将所有链接更改为静
  • 如何选择 Ninja 作为 Conan 的 CMake 生成器?

    在尝试按照柯南的入门指南创建包时 我在尝试运行时遇到了困难conan create demo testing 它不断尝试使用MinGW Makefiles作为 CMake 生成器 但我想使用 Ninja 代替 我的食谱如下 from con