PremakeToolchain

警告

此功能是实验性的,可能会发生重大更改。有关更多信息,请参阅 Conan 稳定性 部分。

重要

此类将生成仅与 Premake 版本 >= 5.0.0 兼容的文件。

在 conanfile 中可以使用名称来使用 PremakeToolchain 生成器。

conanfile.py
class Pkg(ConanFile):
    generators = "PremakeToolchain"
conanfile.txt
[generators]
PremakeToolchain

它也可以在 conanfile 的 generate() 方法中完全实例化

用法示例

from conan.tools.premake import PremakeToolchain

class Pkg(ConanFile):
    settings = "os", "compiler", "build_type", "arch"

    def generate(self):
        tc = PremakeToolchain(self)
        tc.extra_defines = ["VALUE=2"]                      # Add define to main premake workspace
        tc.extra_cflags = ["-Wextra"]                       # Add cflags to main premake workspace
        tc.extra_cxxflags = ["-Wall", "-Wextra"]            # Add cxxflags to main premake workspace
        tc.extra_ldflags = ["-lm"]                          # Add ldflags to main premake workspace
        tc.project("main").extra_defines = ["TEST=False"]   # Add define to "main" project (overriding possible value)
        tc.project("main").extra_cxxflags = ["-FS"]         # Add cxxflags to "main" project
        tc.project("test").disable = True                   # A way of disabling "test" project compilation
        tc.project("foo").kind = "StaticLib"                # Override library type of "foo"
        tc.generate()

生成的文件

在执行 conan install (或在缓存中构建包时)后,PremakeToolchain 会生成 conantoolchain.premake5.lua 文件,其中包含 generate() 方法中提供的信息,以及从当前 settingsconf 等翻译过来的信息。

Premake 不提供任何 API 来与构建脚本进行交互注入/修改。此外,Premake 没有工具链的概念,因此遵循 premake 维护者的指示(请参阅 Premake 讨论),由于 Premake 是基于 Lua 脚本构建的,Conan 生成的文件是一个 Lua 脚本,它将覆盖原始 Premake 脚本,并添加以下信息:

  • 从 Conan 设置检测 buildtype

  • 根据需要定义 C++ 标准。

  • 根据需要定义 C 标准。

  • 根据 conan profile 和操作系统检测 Premake action

  • 定义构建文件夹,以避免 Premake 在源代码仓库中创建构建文件夹和对象文件的默认行为(这违背了 Conan 的良好实践)。

  • 根据用户配置值定义编译器和链接器标志以及宏定义。

  • 定义交叉编译时的正确目标架构。

  • 根据 conan 选项定义 fPIC 标志。

  • 基于 shared conan 选项,PremakeToolchain 会将 workspacekind 设置为 SharedLibStaticLib

注意

PremakeToolchain 无法覆盖已定义 kind 属性(典型情况)的项目 kind。它只能覆盖顶层的 workspace.kind,这只会影响没有定义 kind 的项目。

建议:由于 Premake 不提供像 CMake 的 BUILD_SHARED_LIBS 那样的外部管理库创建类型的机制,因此在使用 Conan 时,建议避免在库项目上定义 kind 属性。

参考

class PremakeToolchain(conanfile)

PremakeToolchain 生成器

参数:

conanfile< ConanFile 对象 > 当前配方对象。始终使用 self

extra_cxxflags

额外的 CXX 标志列表。添加到 buildoptions

extra_cflags

额外的 C 标志列表。添加到 buildoptions

extra_ldflags

额外的链接器标志列表。添加到 linkoptions

extra_defines

额外的预处理器定义列表。添加到 defines

project(project_name)

返回的对象也将具有与工作区相同的属性,但只会影响具有指定名称的项目。:param project_name: 工作区内要更新的项目名称。:return: <PremakeProject> 对象,允许设置项目特定标志。

generate()

创建一个 conantoolchain.premake5.lua 文件,该文件将根据工具链配置正确配置构建路径、二进制路径、配置设置以及编译器/链接器标志。