summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2018-04-18 00:28:42 +0800
committerruki <[email protected]>2018-04-17 20:52:17 +0800
commit00004a01cd1ed305cbe7f1eaf7b50519464d0b32 (patch)
tree7ff2ab9644964909ff7c410c9a75839f742954d1
parentde0b81ca10f04ae93e6a68278ec7f888acd0498d (diff)
add qt.ui rules
-rw-r--r--tests/projects/qt_quickapp/xmake.lua5
-rw-r--r--tests/projects/qt_widgetapp/xmake.lua4
-rw-r--r--xmake/core/project/target.lua6
-rw-r--r--xmake/rules/qt/xmake.lua71
4 files changed, 62 insertions, 24 deletions
diff --git a/tests/projects/qt_quickapp/xmake.lua b/tests/projects/qt_quickapp/xmake.lua
index a2f261d24..111b0d6be 100644
--- a/tests/projects/qt_quickapp/xmake.lua
+++ b/tests/projects/qt_quickapp/xmake.lua
@@ -6,7 +6,7 @@ add_rules("mode.debug", "mode.release")
target("qt_demo")
-- add rules
- add_rules("qt.quickapp")
+ add_rules("qt.application")
-- add headers
add_headers("src/*.h")
@@ -15,3 +15,6 @@ target("qt_demo")
add_files("src/*.cpp")
add_files("src/qml.qrc")
+ -- add frameworks
+ add_frameworks("QtQuick")
+
diff --git a/tests/projects/qt_widgetapp/xmake.lua b/tests/projects/qt_widgetapp/xmake.lua
index 0ffe26ce1..d0b8f1b4a 100644
--- a/tests/projects/qt_widgetapp/xmake.lua
+++ b/tests/projects/qt_widgetapp/xmake.lua
@@ -6,7 +6,7 @@ add_rules("mode.debug", "mode.release")
target("qt_demo")
-- add rules
- add_rules("qt.widgetapp")
+ add_rules("qt.application")
-- add headers
add_headers("src/*.h")
@@ -15,3 +15,5 @@ target("qt_demo")
add_files("src/*.cpp")
add_files("src/mainwindow.ui")
+ -- add frameworks
+ add_frameworks("QtWidgets")
diff --git a/xmake/core/project/target.lua b/xmake/core/project/target.lua
index 3031cb7a9..5902df017 100644
--- a/xmake/core/project/target.lua
+++ b/xmake/core/project/target.lua
@@ -184,6 +184,12 @@ function target:data_set(name, data)
self._DATA[name] = data
end
+-- add user data
+function target:data_add(name, data)
+ self._DATA = self._DATA or {}
+ self._DATA[name] = table.unwrap(table.join(self._DATA[name] or {}, data))
+end
+
-- dump this target
function target:dump()
table.dump(self._INFO)
diff --git a/xmake/rules/qt/xmake.lua b/xmake/rules/qt/xmake.lua
index 189cf1f1a..245c45bbf 100644
--- a/xmake/rules/qt/xmake.lua
+++ b/xmake/rules/qt/xmake.lua
@@ -66,15 +66,47 @@ rule("qt.console")
import("load")(target, {kind = "binary", frameworks = {"QtCore"}})
end)
--- define rule: qt widget application
-rule("qt.widgetapp")
+-- define rule: *.ui
+rule("qt.ui")
-- add rule: qt environment
add_deps("qt.env")
+ -- set extensions
+ set_extensions(".ui")
+
-- on load
on_load(function (target)
- import("load")(target, {kind = "binary", frameworks = {"QtGui", "QtCore"}})
+
+ -- get uic
+ local uic = path.join(target:data("qt").bindir, is_host("windows") and "uic.exe" or "uic")
+ assert(uic and os.isexec(uic), "uic not found!")
+
+ -- save uic
+ target:data_set("qt.uic", uic)
+ end)
+
+ -- on build file
+ on_build_file(function (target, sourcefile_ui)
+
+ -- imports
+ import("core.project.config")
+
+ -- get uic
+ local uic = target:data("qt.uic")
+
+ -- get c++ header file for ui
+ local headerfile_ui = path.join(config.buildir(), ".qt", "ui", target:name(), "ui_" .. path.basename(sourcefile_ui) .. ".h")
+ local headerfile_dir = path.directory(headerfile_ui)
+ if not os.isdir(headerfile_dir) then
+ os.mkdir(headerfile_dir)
+ end
+
+ -- compile ui
+ os.vrunv(ui, {sourcefile_ui, "-o", headerfile_ui})
+
+ -- add clean files
+ target:data_add("qt.cleanfiles", headerfile_ui)
end)
-- define rule: *.qrc
@@ -115,13 +147,8 @@ rule("qt.qrc")
os.mkdir(sourcefile_dir)
end
- -- trace
- if option.get("verbose") then
- print("%s -name qml %s -o %s", rcc, sourcefile_qrc, sourcefile_cpp)
- end
-
-- compile qrc
- os.runv(rcc, {"-name", "qml", sourcefile_qrc, "-o", sourcefile_cpp})
+ os.vrunv(rcc, {"-name", "qml", sourcefile_qrc, "-o", sourcefile_cpp})
-- get object file
local objectfile = target:objectfile(sourcefile_cpp)
@@ -138,24 +165,24 @@ rule("qt.qrc")
table.insert(target:objectfiles(), objectfile)
-- add clean files
- target:data_set("qt.qrc.cleanfiles", {sourcefile_cpp, objectfile})
- end)
-
- -- clean files
- after_clean(function (target)
- for _, file in ipairs(target:data("qt.qrc.cleanfiles")) do
- os.rm(file)
- end
- target:data_set("qt.qrc.cleanfiles", nil)
+ target:data_add("qt.cleanfiles", {sourcefile_cpp, objectfile})
end)
--- define rule: qt quick application
-rule("qt.quickapp")
+-- define rule: qt application
+rule("qt.application")
-- add rules
- add_deps("qt.qrc")
+ add_deps("qt.qrc", "qt.ui")
-- on load
on_load(function (target)
- import("load")(target, {kind = "binary", frameworks = {"QtQuick", "QtGui", "QtQml", "QtNetwork", "QtCore"}})
+ import("load")(target, {kind = "binary", frameworks = {"QtGui", "QtQml", "QtNetwork", "QtCore"}})
+ end)
+
+ -- clean files
+ after_clean(function (target)
+ for _, file in ipairs(target:data("qt.cleanfiles")) do
+ os.rm(file)
+ end
+ target:data_set("qt.cleanfiles", nil)
end)