c++ - Windows 上的柯南声明设置未设置,已设置

标签 c++ windows conan build-system

我正在尝试将程序从 Linux 移植到 Windows。该程序是用 conan 构建的。

目前我运行:

conan install . -if build -s build_type=Debug 

我收到此错误:

ERROR: : 'settings.compiler.cppstd' value not defined

我的 conan.py 中有这个:

class ConanFileNeverEngine(ConanFile):
    generators = "pkg_config"
    requires = [
        "eigen/3.4.0",
        "libffi/3.4.2", # Not sure why but without this wayland causes a conflict.
        "wayland/1.19.0",
        "glfw/3.3.4",
        "shaderc/2019.0",
        "freetype/2.10.4",
        "eigen/3.4.0",
        "harfbuzz/2.8.2",
        "vulkan-memory-allocator/2.3.0",
        "gtest/1.10.0",
        "benchmark/1.5.3",
        "tinygltf/2.5.0",
        "stb/20200203",
        "vulkan-headers/1.2.182",
        "vulkan-validationlayers/1.2.182",
        "cereal/1.3.0"
    ]
     
    settings = {
        "os": None,
        "compiler" : None,
        "cppstd": ["20"],
        "build_type" : None}
     ....

我也尝试过手动设置:

  def config_options(self):
        # self.output.warn("test")
        self.settings.compiler.cppstd = "20"
        self.settings.compiler.runtime = "dynamic"
        if os_info.is_linux:
            if os_info.linux_distro == 'ubuntu':
                window_system = os.environ['XDG_SESSION_TYPE']
                if window_system == 'wayland':
                    self.output.error("System is using wayland, switch to x11.")

我得到了完全相同的错误。

我不明白我正在设置该值。

最佳答案

设置是外部的、项目范围的配置,无法在 conanfile.py 文件中定义或分配值。

设置是在您的个人资料中定义的,例如“默认”,当您键入 conan install 时,您可以看到它被打印出来,例如:

Configuration:
[settings]
arch=x86_64
arch_build=x86_64
build_type=Release
compiler=Visual Studio

您可以检查您定义的值是否不存在,因为您稍后将尝试定义其值。

所以你可以:

  • 在一个配置文件中定义您的 compiler.cppstd。 “默认”配置文件,或您自己的自定义配置文件(您可以使用 conan config install 命令共享配置文件)
  • 请注意,如果需要,您可以使用 mypkg:compiler.cppstd=xxx 设置每个包的设置,通常作为特殊的设置,因为设置旨在用于项目范围
  • 在命令行中传递-s compiler.cppstd=xxx

这样做的原因是“recipes/conanfile”描述了事情是如何完成的,但它们是通用的,它们应该适用于任何配置。特定的配置值(例如 cppstd 或使用的编译器)必须位于配方外部。

关于c++ - Windows 上的柯南声明设置未设置,已设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70587488/

相关文章:

c++ - 为什么包含 windows.h 时 std::min 失败?

c++ - send() 函数中的错误代码 88(Socket 编程)

windows - 使用 DrawText 或类似函数渲染下标

c++ - 柯南如何帮助 CMake 找到 DLL 的位置?

c++ - gtest 与柯南一起安装 : undefined reference to `testing::internal::GetBoolAssertionFailureMessage`

c++ - 分配给转换运算符失败 - C++

c++ - CDHtmlDialog 将焦点设置在输入字段上

c++ - 使用 Qt 在 Windows 桌面上使用蓝牙 LE

gradle - 语言/平台/独立于构建的依赖管理器

c++ - 调用 std::functions