Linux un Windows build differences in CMakeLists and appropriate README

This commit is contained in:
jorenchik
2024-12-08 11:05:50 +02:00
parent 0d53d4fd7b
commit 5df0bf864f
5 changed files with 144 additions and 16 deletions

View File

@@ -5,10 +5,38 @@ set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED True)
set(
CMAKE_CXX_FLAGS_DEBUG
"${CMAKE_CXX_FLAGS_DEBUG} -g3 -O0 -ggdb -fno-inline"
CMAKE_EXPORT_COMPILE_COMMANDS
ON CACHE BOOL "Enable generation of compile_commands.json by default"
)
if (WIN32)
set(
WIN32_ADDITIONAL_OPTIONS "-static-libgcc -static-libstdc++ -static"
CACHE STRING "Additional options for Windows builds"
)
endif()
set(
DEFAULT_DEBUG_OPTIONS "-g3 -O0 -ggdb -fno-inline"
CACHE STRING "Default debug options"
)
set(
DEFAULT_RELEASE_OPTIONS "-O3 -DNDEBUG"
CACHE STRING "Default release options"
)
if (WIN32)
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${DEFAULT_DEBUG_OPTIONS} ${WIN32_ADDITIONAL_OPTIONS}")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${DEFAULT_RELEASE_OPTIONS} ${WIN32_ADDITIONAL_OPTIONS}")
else()
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${DEFAULT_DEBUG_OPTIONS}")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${DEFAULT_RELEASE_OPTIONS}")
endif()
option(COMPILE_TESTS "Compile tests" ON)
add_subdirectory(src/transpiler)
add_subdirectory(src/qtapp)
add_subdirectory(src/test)
if (COMPILE_TESTS)
add_subdirectory(src/test)
endif()

75
README.md Normal file
View File

@@ -0,0 +1,75 @@
# Nepieciešamie rīki un bibliotēkas
## Linux
- `C++` kompilators (piemēram, `g++`)
- Bibliotēka `Qt` (v5.15.0)
- Bibliotēka `QScintilla` (v2.14)
- Bibliotēka `GTest` (v1.15)
- Rīks `CMake`
- Rīks `Ninja`
## Windows
- `C++` kompilators ([`MinGw`](https://winlibs.com/))
- Bibliotēka `Qt` (v5.15.0)
- Bibliotēka `QScintilla` (v2.14)
- Bibliotēka `GTest` (v1.15)
- Rīks `CMake`
- Rīks `Ninja`
# Uzbūvēšana
Linux un Windows sistēmām ir norādītas noklusētās bibliotēku atrašanās vietas.
Lai uzbūvētu ar noklusētiem iestatījumiem.
```bash
mkdir Debug/
cd Debug/
cmake -DCMAKE_BUILD_TYPE=Debug -G Ninja ..
```
Lai nekompilētu testus pievieno `-DCOMPILE_TESTS=OFF`.
Ir pieejamas 2 cmake konfigurācijas - `Debug` (atkļūdošana) un `Release`
(piegāde). Ja nepieciešams pielāgot vienu vai vairākus parametrus, skatīt
nākamās 2 sadaļas.
## Linux
```bash
cmake -DCMAKE_BUILD_TYPE=Debug \
-DQt5_DIR="/usr/lib/cmake/Qt5" \
-DQSCINTILLA_LIB_PATH="/usr/lib/libqscintilla2_qt5.so" \
-DQSCINTILLA_INCLUDE_PATH="/usr/include/qt/Qsci" \
-DGTEST_INCLUDE_DIR="/usr/include/gtest" \
-DGTEST_LIBRARY="/usr/lib/libgtest.so" \
-DGTEST_MAIN_LIBRARY="/usr/lib/libgtest_main.so" \
-G Ninja ..
```
## Windows
```bash
cmake -DCMAKE_BUILD_TYPE=Debug \
-DQt5_DIR="C:/Qt/5.15.0/mingw81_64/lib/cmake/Qt5" \
-DQSCINTILLA_LIB_PATH="C:/Programs/binaries/qscintilla2_qt5.dll" \
-DQSCINTILLA_INCLUDE_PATH="C:/Programs/QScintilla_src-2.14.1/src" \
-DGTEST_INCLUDE_DIR="C:/Programs/binaries/gtest_include" \
-DGTEST_LIBRARY="C:/Programs/binaries/gtest_lib/libgtest.a" \
-DGTEST_MAIN_LIBRARY="C:/Programs/binaries/gtest_lib/libgtest_main.a" \
-G Ninja ..
```
Lai ieliktu direktorijā nepieciešamās bibliotēkas.
```
cd ./src/qtapp/
windeployqt MdemoryApp.exe
```
Darbam uz Windows direktorijā papildus jāieliek `qscintilla2_qt5.dll` un
`Qt5PrintSupport.dll`.
Piegādes kompilēšanā var pielikt `-DWIN32_EXECUTABLE=ON`, lai slēdzot programmu
nerādītos termināla logs.

View File

@@ -1,21 +1,31 @@
# cmake_minimum_required(VERSION 3.10)
# if(CMAKE_VERSION VERSION_LESS "3.7.0")
# set(CMAKE_INCLUDE_CURRENT_DIR ON)
# endif()
# set(CMAKE_CXX_STANDARD 20)
# set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
find_package(Qt5 COMPONENTS Widgets REQUIRED)
if (WIN32)
set(DEFAULT_QT5_DIR "C:/Qt/5.15.0/mingw81_64/lib/cmake/Qt5")
set(DEFAULT_QSCINTILLA_LIB_PATH "C:/Programs/binaries/qscintilla2_qt5.dll")
set(DEFAULT_QSCINTILLA_INCLUDE_PATH "C:/Programs/QScintilla_src-2.14.1/src")
else()
set(DEFAULT_QT5_DIR "/usr/lib/cmake/Qt5")
set(DEFAULT_QSCINTILLA_LIB_PATH "/usr/lib/libqscintilla2_qt5.so")
set(DEFAULT_QSCINTILLA_INCLUDE_PATH "/usr/include/qt/Qsci")
endif()
# find_package(QScintilla REQUIRED)
include_directories(/usr/include/qt/Qsci)
set(Qt5_DIR ${DEFAULT_QT5_DIR} CACHE PATH "Path to Qt5 CMake configuration")
set(QSCINTILLA_LIB_PATH ${DEFAULT_QSCINTILLA_LIB_PATH} CACHE PATH "Path to QScintilla library")
set(QSCINTILLA_INCLUDE_PATH ${DEFAULT_QSCINTILLA_INCLUDE_PATH} CACHE PATH "Path to QScintilla include files")
set(CMAKE_PREFIX_PATH ${Qt5_DIR} ${CMAKE_PREFIX_PATH})
include_directories(${QSCINTILLA_INCLUDE_PATH})
option(WIN32_EXECUTABLE "Set this option to remove terminal opening on Windows" OFF)
if (WIN32 AND WIN32_EXECUTABLE)
set_target_properties(MdemoryApp PROPERTIES WIN32_EXECUTABLE TRUE)
endif()
find_package(Qt5 COMPONENTS Widgets Gui REQUIRED)
qt5_add_resources(RESOURCES ${CMAKE_SOURCE_DIR}/resources/resources.qrc)
add_library(
@@ -31,6 +41,6 @@ add_executable(
${RESOURCES}
)
target_link_libraries(gui Qt5::Widgets /usr/lib/libqscintilla2_qt5.so api)
target_link_libraries(gui Qt5::Widgets Qt5::Gui ${QSCINTILLA_LIB_PATH} api)
target_link_libraries(MdemoryApp gui)
target_include_directories(MdemoryApp PRIVATE ${CMAKE_SOURCE_DIR}/src/include)

View File

@@ -4,6 +4,20 @@ project(MdemoryTest)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
if (WIN32)
set(DEFAULT_GTEST_INCLUDE_DIR "C:/Programs/binaries/gtest_include")
set(DEFAULT_GTEST_LIBRARY "C:/Programs/binaries/gtest_lib/libgtest.a")
set(DEFAULT_GTEST_MAIN_LIBRARY "C:/Programs/binaries/gtest_lib/libgtest_main.a")
else()
set(DEFAULT_GTEST_INCLUDE_DIR "/usr/include/gtest")
set(DEFAULT_GTEST_LIBRARY "/usr/lib/libgtest.so")
set(DEFAULT_GTEST_MAIN_LIBRARY "/usr/lib/libgtest_main.so")
endif()
set(GTEST_INCLUDE_DIR ${DEFAULT_GTEST_INCLUDE_DIR} CACHE PATH "Path to GTest include directory")
set(GTEST_LIBRARY ${DEFAULT_GTEST_LIBRARY} CACHE FILEPATH "Path to GTest library")
set(GTEST_MAIN_LIBRARY ${DEFAULT_GTEST_MAIN_LIBRARY} CACHE FILEPATH "Path to GTest main library")
find_package(GTest REQUIRED)
enable_testing()

View File

@@ -84,6 +84,7 @@ Result<NoneType> ValidateGrammar(const std::vector<Token>& tokens) {
nextToken.tokenType
) == (*transitions)[token.tokenType].end()) {
auto capitalize = [](const std::string& str) {
if (str.empty()) return str;
std::string result = str;