diff options
| author | ruki <[email protected]> | 2015-06-03 16:21:14 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2015-06-03 16:21:14 +0800 |
| commit | fc3638d5128d6f652d79df8985ca5efcb104d22f (patch) | |
| tree | 87ddca12301de8a3e19b210708288ebfdee31f28 /xmake/scripts | |
| parent | bcb0d8e7eb53865f627cadd79eb181de34e86f5a (diff) | |
run the given target
Diffstat (limited to 'xmake/scripts')
| -rw-r--r-- | xmake/scripts/action/_run.lua | 58 | ||||
| -rw-r--r-- | xmake/scripts/base/main.lua | 6 | ||||
| -rw-r--r-- | xmake/scripts/platform/windows/_maker.lua | 57 | ||||
| -rw-r--r-- | xmake/scripts/platform/windows/_windows.lua | 12 |
4 files changed, 118 insertions, 15 deletions
diff --git a/xmake/scripts/action/_run.lua b/xmake/scripts/action/_run.lua index 92972aa0b..8de5ab5f1 100644 --- a/xmake/scripts/action/_run.lua +++ b/xmake/scripts/action/_run.lua @@ -24,15 +24,67 @@ local _run = _run or {} -- load modules +local rule = require("base/rule") +local path = require("base/path") local utils = require("base/utils") local config = require("base/config") +local project = require("base/project") -- done the given config function _run.done() - - -- ok - return true + -- the options + local options = xmake._OPTIONS + assert(options and xmake._PROJECT_DIR) + + -- the target name + local name = options.target + if not name then + -- error + utils.error("no runable target!") + return false + end + + -- the targets + local targets = project.targets() + if not targets or not targets[name] then + -- error + utils.error("not found target: %s!", name) + return false + end + + -- the target + local target = targets[name] + if not target.kind or type(target.kind) ~= "string" or target.kind ~= "binary" then + -- error + utils.error("the target %s is not executale!", name) + return false + end + + -- the target file + local targetfile = rule.targetfile(name, target) + if targetfile and not path.is_absolute(targetfile) then + targetfile = path.absolute(targetfile, xmake._PROJECT_DIR) + end + + -- check the target file + if not targetfile and not os.isfile(targetfile) then + -- error + utils.error("not found target file: %s!", targetfile) + return false + end + + -- the arguments + local arguments = options.arguments or {} + if type(arguments) ~= "table" then + arguments = {} + end + + -- done + local ok = os.execute(string.format("%s %s", targetfile, table.concat(arguments))) + + -- ok? + return utils.ifelse(ok == 0, true, false) end -- return module: _run diff --git a/xmake/scripts/base/main.lua b/xmake/scripts/base/main.lua index 92df2c29c..830a958d6 100644 --- a/xmake/scripts/base/main.lua +++ b/xmake/scripts/base/main.lua @@ -343,7 +343,11 @@ local menu = -- options , options = { - {'f', "file", "kv", "xmake.xproj","Read a given xmake.xproj file." } + {'d', "debug", "k", nil, "Run and debug the given target." } + , {nil, "debugger", "kv", "auto", "Set the debugger path." } + + , {} + , {'f', "file", "kv", "xmake.xproj","Read a given xmake.xproj file." } , {'P', "project", "kv", nil, "Change to the given project directory." , "Search priority:" , " 1. The Given Command Argument" diff --git a/xmake/scripts/platform/windows/_maker.lua b/xmake/scripts/platform/windows/_maker.lua index 9b459ad45..f7bdddbf3 100644 --- a/xmake/scripts/platform/windows/_maker.lua +++ b/xmake/scripts/platform/windows/_maker.lua @@ -25,13 +25,57 @@ local os = require("base/os") local path = require("base/path") local utils = require("base/utils") local string = require("base/string") +local config = require("base/config") -- define module: _maker local _maker = _maker or {} +-- enter the given environment +function _maker._enter(name) + + -- check + assert(name) + + -- get the pathes for the vs environment + local old = nil + local new = config.get("__vsenv_" .. name) + if new then + + -- get the current pathes + old = os.getenv(name) or "" + + -- append the current pathes + new = new .. ";" .. old + + -- update the pathes for the environment + os.setenv(name, new) + end + + -- return the previous environment + return old; +end + +-- leave the given environment +function _maker._leave(name, old) + + -- check + assert(name) + + -- restore the previous environment + if old then + os.setenv(name, old) + end +end + -- build the target from the given makefile function _maker.done(mkfile, target) + -- enter the vs environment + local pathes = _maker._enter("path") + local libs = _maker._enter("lib") + local includes = _maker._enter("include") + local libpathes = _maker._enter("libpath") + -- make command local cmd = nil if mkfile and os.isfile(mkfile) then @@ -42,12 +86,15 @@ function _maker.done(mkfile, target) -- done local ok = os.execute(cmd) - if ok ~= 0 then - return false - end - -- ok - return true + -- leave the vs environment + _maker._leave("path", pathes) + _maker._leave("lib", libs) + _maker._leave("include", includes) + _maker._leave("libpath", libpathes) + + -- ok? + return utils.ifelse(ok == 0, true, false) end -- return module: _maker diff --git a/xmake/scripts/platform/windows/_windows.lua b/xmake/scripts/platform/windows/_windows.lua index 012b0a0ff..b1bc0890b 100644 --- a/xmake/scripts/platform/windows/_windows.lua +++ b/xmake/scripts/platform/windows/_windows.lua @@ -46,18 +46,18 @@ function _windows.make(configs) configs.format.static = {"", ".lib"} configs.format.object = {"", ".obj"} configs.format.shared = {"", ".dll"} - configs.format.execute = {"", ".exe"} + configs.format.binary = {"", ".exe"} -- init the compiler configs.compiler = {} - configs.compiler.cc = config.get("cc") or "cl.exe" - configs.compiler.cxx = config.get("cxx") or "cl.exe" + configs.compiler.cc = config.get("cc") or "cl.exe" + configs.compiler.cxx = config.get("cxx") or "cl.exe" -- init the linker configs.linker = {} - configs.linker.binary = config.get("ld") or "link.exe" - configs.linker.static = config.get("ar") or "link.exe" - configs.linker.shared = config.get("sh") or "link.exe" + configs.linker.binary = config.get("ld") or "link.exe" + configs.linker.static = config.get("ar") or "link.exe" + configs.linker.shared = config.get("sh") or "link.exe" end |
