LoginSignup
1
2

More than 5 years have passed since last update.

Premakeで「追加の依存ファイル」を設定する

Last updated at Posted at 2016-10-07

Premake

cmakeみたいな自動プロジェクトファイル構成システム
https://github.com/premake/premake-core/wiki

参考:
ビルドツールpremakeの紹介

環境

Windows 7
Visual Studio 2012
Premake 5.0 alpha 9

Premakeの基本的な使い方

├─ src
│   ├─ main.cpp
│   └─ sample.cpp
├─ include
│   └─ sample.h
├─ premake5.exe
└─ premake5.lua

上のような感じでソースファイルとヘッダファイルを用意。
このディレクトリでコマンドラインから以下のように実行。

premake5.exe vs2012

すると、build_premake(premake5.luaで指定したディレクトリ)が追加され、
中に ソリューションファイル(.sln)やプロジェクトファイル(.vcxproj)が作成される。

premake5.lua の記述内容

premake5.lua

-- includeexternal("extra.lua")                      -- 他のluaファイルを開く

workspace "sample"
  location "build_premake"
  configurations { "Debug", "Release" }

  externalproject "sampleLib"                        -- 外部プロジェクト
    location "../sampleLib/build_premake/"           -- 相対パスで.vcxprojがあるディレクトリを指定
    kind     "StaticLib"
    language "C++"

  project "sample"
    kind            "ConsoleApp"                     -- .libは"StaticLib"、.dllは"SharedLib"
    language        "C++"
    targetdir       "build_premake/%{cfg.buildcfg}"  -- %{cfg.buildcfg} は Debug or Release
    defines         { "NOMINMAX" }                   -- プリプロセッサ
    disablewarnings { "4100", "4200" }               -- C4100,C4200の警告を表示しないように

    files           { "src/**.h", "src/**.cpp", }
    includedirs     { "include" }                    -- 追加のインクルードディレクトリ

    --libdirs       { "lib" }                        -- 追加のライブラリディレクトリ(必要であれば)
    --links         { "hoge.lib" }                   -- 追加の依存ファイル(必要であれば)
    links           { "sampleLib" }                  -- 外部プロジェクトとリンク

    filter "configurations:Debug"                    -- 以下Debugの設定
      targetsuffix  "_d"                             -- exeファイルのサフィックス(sample_d.exeのようになる)
      defines       { "DEBUG" }
      flags         { "Symbols" }                    -- シンボル情報作成
      optimize      "OFF"                            -- 最適化無し

    filter "configurations:Release"                  -- 以下Releaseの設定
      optimize      "Speed"                          -- 速度重視で最適化
    filter {}                                        -- フィルタのクリア

追加の依存ファイルを設定する方法

.libファイルを作成する場合(kind "StaticLib")で、
「追加の依存ファイル」を設定する場合、上記のようにlinksを指定してもうまくいかない。
以下のような処理をpremake5.luaに追加する。

premake5.lua
local p = premake
function myAdditionalStaticDependencies(cfg)
    -- **.lib のようなものだけ追加
    local links = p.config.getlinks(cfg, "system", "fullpath")
    if #links > 0 then
        links = path.translate(table.concat(links, ";"))
        p.x('<AdditionalDependencies>%s;%%(AdditionalDependencies)</AdditionalDependencies>', links)
    end

    local dirs = p.config.getlinks(cfg, "system", "directory")
    if #dirs > 0 then
        dirs = path.translate(table.concat(dirs, ";"))
        p.x('<AdditionalLibraryDirectories>%s;</AdditionalLibraryDirectories>', dirs)
    end

end
p.override(p.vstudio.vc2010.elements, "lib", function(base, cfg, explicit)
    local calls = base(cfg, explicit)
    if cfg.kind == p.STATICLIB then
        table.insert(calls, myAdditionalStaticDependencies)
    end
    return calls
end)

-- 以降がビルドの定義
workspace "sample"
  location "build_premake"
  configurations { "Debug", "Release" }

  project "sampleLib"
    kind            "StaticLib"                      -- .libファイルを作成
    language        "C++"
    targetdir       "build_premake/%{cfg.buildcfg}"
    files           { "src/**.h", "src/**.cpp", }

    libdirs         { "lib" }                        -- 追加のライブラリディレクトリ
    links           { "additional.lib" }             -- ライブラリアン > 追加の依存ファイルに additional.lib が追加される

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2