-
Notifications
You must be signed in to change notification settings - Fork 0
/
CMakeLists.txt
96 lines (70 loc) · 3.81 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
cmake_minimum_required(VERSION 3.15.5)
# Название решения (solution)
set(SOLUTION_NAME solution)
project(${SOLUTION_NAME})
# Имя проекта и исполняемого файла (переменная PROJECT_NAME уже занята)
set(PROJ_NAME imv)
# Оставляем только две конфигурации
set(CMAKE_CONFIGURATION_TYPES Debug Release)
# Создаем проекты libcmark-gfm_static и libcmark-gfm-extensions_static
option(CMARK_TESTS "" OFF)
option(CMARK_STATIC "" ON)
option(CMARK_SHARED "" OFF)
option(CMARK_LIB_FUZZER "" OFF)
add_subdirectory(third_party/cmark-gfm)
# Подключаем Chromium Embedded Framework
set(USE_SANDBOX OFF CACHE BOOL "Enable or disable use of the sandbox.") # Подменяем опцию и отключаем песочницу
set(CEF_ROOT "${CMAKE_HOME_DIRECTORY}/third_party/cef")
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CEF_ROOT}/cmake")
find_package(CEF REQUIRED)
add_subdirectory(${CEF_LIBCEF_DLL_WRAPPER_PATH} libcef_dll_wrapper)
# ХЗ
ADD_LOGICAL_TARGET("libcef_lib" "${CEF_LIB_DEBUG}" "${CEF_LIB_RELEASE}")
# Куда будет помещен скомпилированный исполняемый файл
set(OUT_DIR ${CMAKE_BINARY_DIR}/result)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${OUT_DIR})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${OUT_DIR})
# Создаем проект приложения
file(GLOB_RECURSE CEFSIMPLE_SRCS "application/*.h" "application/*.cpp" "Resources/Windows/*.rc")
add_executable(${PROJ_NAME} WIN32 ${CEFSIMPLE_SRCS})
# cmark
target_link_libraries(${PROJ_NAME} libcmark-gfm-extensions_static libcmark-gfm_static)
include_directories(
${CMAKE_HOME_DIRECTORY}/third_party/cmark-gfm/src
${PROJECT_BINARY_DIR}/third_party/cmark-gfm/src
${PROJECT_BINARY_DIR}/third_party/cmark-gfm/extensions
)
set_property(TARGET libcmark-gfm_static PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>") # Используем статический /MT
set_property(TARGET libcmark-gfm-extensions_static PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>") # / MT
# cef
add_dependencies(${PROJ_NAME} libcef_dll_wrapper)
SET_EXECUTABLE_TARGET_PROPERTIES(${PROJ_NAME})
target_link_libraries(${PROJ_NAME} libcef_lib libcef_dll_wrapper ${CEF_STANDARD_LIBS})
if(WIN32)
# Без манифеста браузер не работает
add_custom_command(
TARGET ${PROJ_NAME} POST_BUILD
COMMAND "mt.exe" -nologo
-manifest \"${CMAKE_HOME_DIRECTORY}/Resources/Windows/App.manifest\"
-outputresource:"${OUT_DIR}/${PROJ_NAME}.exe"\;\#1
COMMENT "Adding manifest..."
)
else()
# Set rpath so that libraries can be placed next to the executable.
# Без этого программа не найдет свои ресурсы, если запущена не из текущей папки
set_target_properties(${PROJ_NAME} PROPERTIES INSTALL_RPATH "$ORIGIN")
set_target_properties(${PROJ_NAME} PROPERTIES BUILD_WITH_INSTALL_RPATH TRUE)
set_target_properties(${PROJ_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${OUT_DIR})
endif()
# Копируем файлы в результирующую папку
# cef
COPY_FILES("${PROJ_NAME}" "${CEF_BINARY_FILES}" "${CEF_BINARY_DIR}" "${OUT_DIR}")
COPY_FILES("${PROJ_NAME}" "${CEF_RESOURCE_FILES}" "${CEF_RESOURCE_DIR}" "${OUT_DIR}")
# Мои
file(COPY "${CMAKE_HOME_DIRECTORY}/Resources/HtmlRes" DESTINATION "${OUT_DIR}")
# Назначаем проект приложения стартовым
set_property(DIRECTORY ${CMAKE_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT ${PROJ_NAME})
# Рабочая папка при отладке
set_property(TARGET ${PROJ_NAME} PROPERTY VS_DEBUGGER_WORKING_DIRECTORY ${OUT_DIR})
# Активируем стандарт C++17
set_property(TARGET ${PROJ_NAME} PROPERTY CXX_STANDARD 17)