From 6fe2a79af72935f802e4c253ee98ca8d4646f9f7 Mon Sep 17 00:00:00 2001 From: qr243vbi Date: Sun, 24 May 2026 04:23:53 +0800 Subject: [PATCH] Add CMakeLists.txt --- .gitignore | 4 + examples/QQScriptDemo/CMakeLists.txt | 84 ++++++++++++++ src/QScriptEngine/CMakeLists.txt | 109 ++++++++++++++++++ .../scriptEngine/QScriptLibrary.cpp | 2 +- 4 files changed, 198 insertions(+), 1 deletion(-) create mode 100644 examples/QQScriptDemo/CMakeLists.txt create mode 100644 src/QScriptEngine/CMakeLists.txt diff --git a/.gitignore b/.gitignore index 56dc5d6..d1daee4 100644 --- a/.gitignore +++ b/.gitignore @@ -163,3 +163,7 @@ CMakeLists.txt.user* *build*/ .vscode/ + +src/QScriptEngine/build + +src/QQScriptDemo/build diff --git a/examples/QQScriptDemo/CMakeLists.txt b/examples/QQScriptDemo/CMakeLists.txt new file mode 100644 index 0000000..0afeb1b --- /dev/null +++ b/examples/QQScriptDemo/CMakeLists.txt @@ -0,0 +1,84 @@ +cmake_minimum_required(VERSION 3.16) + +project(QQScriptDemo LANGUAGES CXX) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_AUTOMOC ON) + +find_package(Qt6 REQUIRED COMPONENTS + Core + Gui + Widgets + Concurrent +) + +# Check whether Qt Script is available. +# Qt6 normally doesn't provide QtScript, but this preserves the qmake logic. +find_package(Qt6 QUIET COMPONENTS Script) + +if(Qt6Script_FOUND) + set(SCRIPT_LIB Qt6::Script) +else() + add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../../src/QScriptEngine + ${CMAKE_BINARY_DIR}/QScriptEngine) + + # Replace ScriptEngine with the actual target name exported + # by ../../src/QScriptEngine/CMakeLists.txt. + set(SCRIPT_LIB QuickQtScript) +endif() + +qt_standard_project_setup() + +qt_add_executable(${PROJECT_NAME} + main.cpp + mainwindow.cpp + myqobject.cpp + myscriptengineagent.cpp + + codeEditor/jscodeeditor.cpp + codeEditor/jssyntaxhighlighter.cpp + codeEditor/linenumberarea.cpp + codeEditor/codefoldingarea.cpp + + mainwindow.h + myqobject.h + barprototype.h + myscriptcode.h + myscriptengineagent.h + + codeEditor/jscodeeditor.h + codeEditor/jssyntaxhighlighter.h + codeEditor/linenumberarea.h + codeEditor/codefoldingarea.h + + mainwindow.ui + js.qrc +) + +if(NOT Qt6Script_FOUND) + target_sources(${PROJECT_NAME} + PRIVATE + quickjsTest.h + ) +endif() + +target_link_libraries(${PROJECT_NAME} + PRIVATE + Qt6::Core + Qt6::Gui + Qt6::Widgets + Qt6::Concurrent + ${SCRIPT_LIB} +) + +# Equivalent of: +# DESTDIR = $$OUT_PWD +set_target_properties(${PROJECT_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" +) + +install(TARGETS ${PROJECT_NAME} + RUNTIME DESTINATION bin +) diff --git a/src/QScriptEngine/CMakeLists.txt b/src/QScriptEngine/CMakeLists.txt new file mode 100644 index 0000000..bffdac5 --- /dev/null +++ b/src/QScriptEngine/CMakeLists.txt @@ -0,0 +1,109 @@ +cmake_minimum_required(VERSION 3.16) +project(QuickQtScript LANGUAGES CXX) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_POSITION_INDEPENDENT_CODE ON) +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) +set(CMAKE_INTERPROCEDURAL_OPTIMIZATION OFF) + +find_package(Qt6 REQUIRED COMPONENTS Core) + +# ------------------------------------------------- +# Includes +# ------------------------------------------------- +include_directories( + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/scriptEngine/include +) + + +# ------------------------------------------------- +# Option: system or bundled QuickJS +# ------------------------------------------------- +if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/quickjs/CMakeLists.txt") + set(USE_SYSTEM_QUICKJS_DEFAULT OFF) +else() + set(USE_SYSTEM_QUICKJS_DEFAULT ON) +endif() + +option(USE_SYSTEM_QUICKJS "Use system-installed QuickJS instead of bundled" ${USE_SYSTEM_QUICKJS_DEFAULT}) + +# ------------------------------------------------- +# QuickJS selection +# ------------------------------------------------- +if(USE_SYSTEM_QUICKJS) + message(STATUS "Using SYSTEM QuickJS") + find_package(qjs REQUIRED CONFIG) +else() + message(STATUS "Using BUNDLED QuickJS") + + add_subdirectory(quickjs) +endif() + +# ------------------------------------------------- +# Library target +# ------------------------------------------------- +add_library(${PROJECT_NAME} STATIC SHARED + ${CMAKE_CURRENT_SOURCE_DIR}/scriptEngine/QScriptContext.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/scriptEngine/QScriptEngine.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/scriptEngine/QScriptValue.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/scriptEngine/QScriptValueIterator.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/scriptEngine/QScriptEngineAgent.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/scriptEngine/QScriptContextInfo.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/scriptEngine/QScriptSyntaxCheckResult.cpp + + ${CMAKE_CURRENT_SOURCE_DIR}/scriptEngine/include/QScriptContext.h + ${CMAKE_CURRENT_SOURCE_DIR}/scriptEngine/include/QScriptEngine.h + ${CMAKE_CURRENT_SOURCE_DIR}/scriptEngine/include/QScriptValue.h + ${CMAKE_CURRENT_SOURCE_DIR}/scriptEngine/include/QScriptValueIterator.h + ${CMAKE_CURRENT_SOURCE_DIR}/scriptEngine/include/QScriptEngineAgent.h + ${CMAKE_CURRENT_SOURCE_DIR}/scriptEngine/include/QScriptContextInfo.h + ${CMAKE_CURRENT_SOURCE_DIR}/scriptEngine/include/QScriptSyntaxCheckResult.h +) + +target_link_libraries(${PROJECT_NAME} PRIVATE + Qt6::Core +) + +target_compile_options(${PROJECT_NAME} PRIVATE -fpermissive -Wno-narrowing) + +target_include_directories(${PROJECT_NAME} PUBLIC + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/scriptEngine/include +) + +# ------------------------------------------------- +# Compile definitions +# ------------------------------------------------- + +target_compile_definitions(${PROJECT_NAME} PRIVATE + JS_HAVE_THREADS + _GNU_SOURCE +) + +if (WIN32) + target_compile_definitions(${PROJECT_NAME} PRIVATE + __TINYC__ + WIN32_LEAN_AND_MEAN + ) + + target_link_libraries(${PROJECT_NAME} PRIVATE + ws2_32 + iphlpapi + ) +endif() + +target_link_libraries(${PROJECT_NAME} PRIVATE qjs) + +# ------------------------------------------------- +# Optional feature (USE_LIBC) +# ------------------------------------------------- +option(USE_LIBC "Enable libc support" OFF) + +if (USE_LIBC) + target_sources(${PROJECT_NAME} PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/scriptEngine/QScriptLibrary.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/scriptEngine/include/QScriptLibrary.h + ) +endif() diff --git a/src/QScriptEngine/scriptEngine/QScriptLibrary.cpp b/src/QScriptEngine/scriptEngine/QScriptLibrary.cpp index db66263..687432d 100644 --- a/src/QScriptEngine/scriptEngine/QScriptLibrary.cpp +++ b/src/QScriptEngine/scriptEngine/QScriptLibrary.cpp @@ -24,7 +24,7 @@ * THE SOFTWARE. */ #include -#include +#include #include #include #include "quickjs.h"