diff options
| author | ruki <[email protected]> | 2018-04-18 00:28:42 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2018-04-17 20:52:17 +0800 |
| commit | 00004a01cd1ed305cbe7f1eaf7b50519464d0b32 (patch) | |
| tree | 7ff2ab9644964909ff7c410c9a75839f742954d1 | |
| parent | de0b81ca10f04ae93e6a68278ec7f888acd0498d (diff) | |
add qt.ui rules
| -rw-r--r-- | tests/projects/qt_quickapp/xmake.lua | 5 | ||||
| -rw-r--r-- | tests/projects/qt_widgetapp/xmake.lua | 4 | ||||
| -rw-r--r-- | xmake/core/project/target.lua | 6 | ||||
| -rw-r--r-- | xmake/rules/qt/xmake.lua | 71 |
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) |
