PremakeToolchain

警告

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

重要

此类将生成仅与 Premake 5.0.0 或更高版本兼容的文件。

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

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()

生成的文件

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

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

  • 从 Conan 设置中检测 buildtype

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

  • 根据需要定义 C 标准。

  • 根据 Conan 配置文件和操作系统检测 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 object > 当前的配方对象。始终使用 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 文件,该文件将根据工具链配置正确配置构建路径、二进制路径、配置设置以及编译器/链接器标志。