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

生成的文件

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 选项,PremakeToolchainworkspacekind 设置为 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)

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

generate()

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