summaryrefslogtreecommitdiff
path: root/xmake/scripts/base/makefile.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2015-05-19 16:01:06 +0800
committerruki <[email protected]>2015-05-19 16:01:06 +0800
commitbf3130929b7cf628dad0300a835e13c7bb91feb0 (patch)
tree8d6c54570bb2a39c72ca9ba862f4b1b0d5859951 /xmake/scripts/base/makefile.lua
parent75bdd1517bc093774855c23a286e97113896f5f0 (diff)
make objects for makefile
Diffstat (limited to 'xmake/scripts/base/makefile.lua')
-rw-r--r--xmake/scripts/base/makefile.lua81
1 files changed, 69 insertions, 12 deletions
diff --git a/xmake/scripts/base/makefile.lua b/xmake/scripts/base/makefile.lua
index a54f74199..becf253d7 100644
--- a/xmake/scripts/base/makefile.lua
+++ b/xmake/scripts/base/makefile.lua
@@ -40,7 +40,7 @@ function makefile._srcfiles(target)
-- no files?
if not target.files then
- return nil
+ return {}
end
-- wrap files first
@@ -87,8 +87,11 @@ function makefile._objfiles(srcfiles)
local objfiles = {}
for _, srcfile in ipairs(srcfiles) do
+ -- make object file
+ local objfile = path.directory(srcfile) .. "/" .. format[1] .. path.basename(srcfile) .. format[2]
+
-- save it
- objfiles[i] = path.directory(srcfile) .. "/" .. format[1] .. path.basename(srcfile) .. format[2]
+ objfiles[i] = path.translate(objfile)
i = i + 1
end
@@ -97,12 +100,62 @@ function makefile._objfiles(srcfiles)
return objfiles
end
+-- make the object of the given target to the makefile
+function makefile._make_object(file, target, srcfile, objfile)
+
+ -- check
+ assert(file and target and srcfile and objfile)
+
+ -- make head
+ file:write(string.format("%s:", objfile))
+
+ -- make dependence
+ file:write(string.format(" %s\n", srcfile))
+
+ -- make body
+ file:write(string.format("\techo \"%s\"\n", srcfile))
+
+ -- make tail
+ file:write("\n")
+
+ -- ok
+ return true
+end
+
+-- make all objects of the given target to the makefile
+function makefile._make_objects(file, target, srcfiles, objfiles)
+
+ -- check
+ assert(file and target and srcfiles and objfiles)
+
+ -- make all objects
+ local i = 1
+ for _, objfile in ipairs(objfiles) do
+
+ -- make object
+ if not makefile._make_object(file, target, srcfiles[i], objfile) then
+ return false
+ end
+
+ -- next
+ i = i + 1
+ end
+
+ -- ok
+ return true
+end
+
-- make the given target to the makefile
function makefile._make_target(file, name, target)
-- check
assert(file and name and target)
+ -- get source and object files
+ local srcfiles = makefile._srcfiles(target)
+ local objfiles = makefile._objfiles(srcfiles)
+ assert(srcfiles and objfiles)
+
-- make head
file:write(string.format("%s:", name))
@@ -114,13 +167,9 @@ function makefile._make_target(file, name, target)
end
end
- -- make dependence for object
- local srcfiles = makefile._srcfiles(target)
- if srcfiles then
- local objfiles = makefile._objfiles(srcfiles)
- for _, objfile in ipairs(objfiles) do
- file:write(" " .. path.translate(objfile))
- end
+ -- make dependence for objects
+ for _, objfile in ipairs(objfiles) do
+ file:write(" " .. objfile)
end
-- make dependence end
@@ -129,11 +178,11 @@ function makefile._make_target(file, name, target)
-- make body
file:write(string.format("\techo \"%s\"\n", name))
- -- make end
+ -- make tail
file:write("\n")
- -- ok
- return true
+ -- make objects for this target
+ return makefile._make_objects(file, target, srcfiles, objfiles)
end
-- make all targets to the makefile
@@ -198,9 +247,17 @@ function makefile.make()
-- make all targets to the makefile
if not makefile._make_targets(file) then
+
-- error
utils.error("save %s failed!", path)
+
+ -- close the makefile
file:close()
+
+ -- remove the makefile
+ os.rm(path)
+
+ -- failed
return false
end