Может ли Premake распространять включенные в проекты зависимости? - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть проект, который примерно структурирован как:

main.c
premake5.lua

moduleA/
  premake5.lua
  include/modulea.h
  src/modulea.c

moduleB/
  premake5.lua
  include/moduleb.h
  src/moduleb.c

Мой верхний уровень premake5.lua довольно прост:

workspace "myproject"
    configurations { "Debug", "Release" }

    include "moduleA"
    include "moduleB"

    project "myproject"
        kind "ConsoleApp"
        language "C"

        files { "main.c" }
        includedirs { "." }

        links { "moduleA" , "moduleB" }

Я хотел бы иметь возможность выразить свои модули'конфигурация / зависимости без соглашений о жестком кодировании, используемых в содержащем проекте.Модули A и B будут повторно использоваться в других проектах, поэтому я хочу избежать необходимости:

project "moduleA"
  kind "StaticLib"
  -- files, etc
  include { "..", "../moduleB/include" }
  links { "moduleB" }

Строки включения, содержащие .., делают предположения о структуре родительского проекта, которые могут не всегда выполняться.

Есть ли какой-нибудь способ для сценария Premake более высокого уровня, чтобы "сказать" этим подпроектам "вот база для включенных / sysincludedirs"?Даже если это включает в себя написание этих зависимых проектов другим способом, чтобы принять эту информацию?

Например (и позвольте мне подчеркнуть, что я недостаточно знаю Lua или Premake, чтобы понять, насколько это имеет смысл), мои модулиможет сказать «убедитесь, что вы установили MODULE_INCLUDE_BASE и MODULE_SYS_INCLUDE_BASE», а затем используете:

project "moduleA"
  -- etc
  include { "%{MODULE_INCLUDE_BASE}/moduleB/include" }

Проекты, зависящие от более высокого уровня, могут затем ... установить? ... эти переменные перед включением конфигов зависимостей,(Опять же, это всего лишь пример, может быть, есть более элегантный способ сделать это.)

Ответы [ 2 ]

0 голосов
/ 24 марта 2019

Я бы предложил проверить модуль экспорта для предварительных проектов https://github.com/Meoo/premake-export

, которые могут определять вещи, которые необходимо экспортировать в другие библиотеки или приложения.В свою очередь, другие библиотеки могут импортировать проекты, от которых они зависят. Это очень удобно, а синтаксис очень выразителен!

0 голосов
/ 01 февраля 2019

Один из вариантов - отложить оценку, поместив вызов проекта в саму функцию:

function project_A()
    project "moduleA"
        kind "StaticLib"
        language "C"
        files { "moduleA/src/*.c" }
        includedirs { '.' }
end

Когда он вызывается с верхнего уровня premake5.lua, '.' оценивается в контекстесценарий верхнего уровня:

workspace "myproject"
    configurations { "Debug", "Release" }

    include "moduleA"
    include "moduleB"

    module_process()
    module_protocol()

    -- ...

Затем выполняются включения относительно этого сценария верхнего уровня.

...