diff --git a/.gitignore b/.gitignore index 4e64f91..dfd8062 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,22 @@ +# Qt Creator / qmake 产物 build/ build-*/ -*.user -*.autosave -.vscode/ -.idea/ +Makefile +*.o +moc_*.cpp +moc_*.h +qrc_*.cpp +ui_*.h +.qmake.stash +*_plugin_import.cpp +*.pro.user +*.pro.user.* + +# 构建工具 compile_commands.json CMakeLists.txt.user + +# 编辑器 +.vscode/ +.idea/ +*.autosave diff --git a/CMakeLists.txt b/CMakeLists.txt deleted file mode 100644 index 9832176..0000000 --- a/CMakeLists.txt +++ /dev/null @@ -1,38 +0,0 @@ -cmake_minimum_required(VERSION 3.16) - -project(VoiletMark VERSION 0.1.0 LANGUAGES CXX) - -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(CMAKE_AUTOMOC ON) -set(CMAKE_INCLUDE_CURRENT_DIR ON) - -if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) - set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE) -endif() - -find_package(Qt5 5.12 REQUIRED COMPONENTS Core Gui Widgets) - -set(VM_SOURCES - src/main.cpp - src/MainWindow.cpp - src/MarkdownEditor.cpp - src/MarkdownHighlighter.cpp - src/ThemeManager.cpp -) - -set(VM_HEADERS - src/MainWindow.h - src/MarkdownEditor.h - src/MarkdownHighlighter.h - src/ThemeManager.h -) - -add_executable(VoiletMark WIN32 MACOSX_BUNDLE ${VM_SOURCES} ${VM_HEADERS}) - -target_link_libraries(VoiletMark PRIVATE Qt5::Widgets) -target_compile_definitions(VoiletMark PRIVATE VM_VERSION="${PROJECT_VERSION}") - -install(TARGETS VoiletMark - RUNTIME DESTINATION bin - BUNDLE DESTINATION .) diff --git a/README.md b/README.md index d23ca47..eacb211 100644 --- a/README.md +++ b/README.md @@ -44,13 +44,23 @@ ## 构建 -依赖:Qt 5.12+(含 Widgets)、CMake 3.16+、支持 C++17 的编译器。 +依赖:Qt 5.12+(含 Widgets 模块)、支持 C++17 的编译器。 + +### Qt Creator(推荐) + +1. 用 Qt Creator 打开根目录的 `VoiletMark.pro` +2. 在 **项目 → 构建设置** 中选好本机的 Qt 5.15.2 套件(Kit) +3. `Ctrl+R` 直接运行 + +Qt Creator 默认走影子构建(shadow build),不会污染源码目录。 + +### 命令行 ```bash -cmake -S . -B build -DCMAKE_BUILD_TYPE=Release \\ - -DCMAKE_PREFIX_PATH="$HOME/Qt5/5.15.2/gcc_64" -cmake --build build -j"$(nproc)" -./build/VoiletMark +mkdir -p build && cd build +$HOME/Qt5/5.15.2/gcc_64/bin/qmake ../VoiletMark.pro +make -j"$(nproc)" +./VoiletMark ``` 或者直接: @@ -59,7 +69,8 @@ cmake --build build -j"$(nproc)" ./scripts/build.sh ``` -脚本会自动探测 `$HOME/Qt5/5.15.2/gcc_64`,也可以用 `QT_PREFIX` 环境变量指定。 +脚本会依次查找 `command -v qmake`、`$QT_PREFIX/bin/qmake`、 +`$HOME/Qt5/5.15.2/gcc_64/bin/qmake`;也可以用 `QMAKE=/path/to/qmake` 直接指定。 ## 命令行 diff --git a/VoiletMark.pro b/VoiletMark.pro new file mode 100644 index 0000000..a1bfbc6 --- /dev/null +++ b/VoiletMark.pro @@ -0,0 +1,25 @@ +TEMPLATE = app +TARGET = VoiletMark +VERSION = 0.1.0 + +QT += core gui widgets + +CONFIG += c++17 warn_on + +# 让 main.cpp 里的 QStringLiteral(VM_VERSION) 拿到 "0.1.0" +DEFINES += VM_VERSION=\\\"$$VERSION\\\" + +INCLUDEPATH += $$PWD/src + +SOURCES += \ + src/main.cpp \ + src/MainWindow.cpp \ + src/MarkdownEditor.cpp \ + src/MarkdownHighlighter.cpp \ + src/ThemeManager.cpp + +HEADERS += \ + src/MainWindow.h \ + src/MarkdownEditor.h \ + src/MarkdownHighlighter.h \ + src/ThemeManager.h diff --git a/scripts/build.sh b/scripts/build.sh index e99c1e9..2447c94 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -1,5 +1,6 @@ #!/usr/bin/env bash -# 一键构建。可用 QT_PREFIX 指定 Qt 前缀,例如: +# 一键构建(qmake)。指定 Qt: +# QMAKE=$HOME/Qt5/5.15.2/gcc_64/bin/qmake ./scripts/build.sh # QT_PREFIX=$HOME/Qt5/5.15.2/gcc_64 ./scripts/build.sh set -euo pipefail @@ -14,14 +15,28 @@ if [[ -z "${QT_PREFIX:-}" ]]; then done fi -cmake_args=(-S "$root" -B "$root/build" -DCMAKE_BUILD_TYPE=Release) -if [[ -n "${QT_PREFIX:-}" ]]; then - cmake_args+=(-DCMAKE_PREFIX_PATH="$QT_PREFIX") - echo "使用 Qt: $QT_PREFIX" +qmake_bin="${QMAKE:-}" +if [[ -z "$qmake_bin" ]]; then + if command -v qmake >/dev/null 2>&1; then + qmake_bin="$(command -v qmake)" + elif [[ -n "${QT_PREFIX:-}" && -x "$QT_PREFIX/bin/qmake" ]]; then + qmake_bin="$QT_PREFIX/bin/qmake" + fi fi -cmake "${cmake_args[@]}" -cmake --build "$root/build" -j"$(nproc)" +if [[ -z "$qmake_bin" ]]; then + echo "找不到 qmake;请设置 QT_PREFIX 或 QMAKE 指向 Qt 安装目录。" >&2 + exit 1 +fi + +echo "使用 qmake: $qmake_bin" +build_dir="$root/build" +mkdir -p "$build_dir" +( + cd "$build_dir" + "$qmake_bin" "$root/VoiletMark.pro" + make -j"$(nproc)" +) echo -echo "构建完成: $root/build/VoiletMark" +echo "构建完成: $build_dir/VoiletMark"