Skip to content

Commit 4335f29

Browse files
committed
refactor: modern cmake fix
1 parent 87909ad commit 4335f29

5 files changed

Lines changed: 38 additions & 89 deletions

File tree

CMake/Common.cmake

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,30 @@ option(USE_UNITY_BUILD "Use unity build" ON)
22
option(EXPORT_COMPILE_COMMANDS "Whether to export all compile commands" OFF)
33

44
set(CMAKE_CXX_STANDARD 20)
5+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
56
set(CMAKE_UNITY_BUILD ${USE_UNITY_BUILD})
67
set(CMAKE_EXPORT_COMPILE_COMMANDS ${EXPORT_COMPILE_COMMANDS})
78

8-
get_cmake_property(generator_is_multi_config GENERATOR_IS_MULTI_CONFIG)
99
if (${CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT})
1010
set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/Installed CACHE PATH "" FORCE)
1111
endif()
1212

13-
add_definitions(-DBUILD_CONFIG_DEBUG=$<IF:$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>,1,0>)
14-
15-
add_definitions(-DPLATFORM_WINDOWS=$<IF:$<PLATFORM_ID:Windows>,1,0>)
16-
add_definitions(-DPLATFORM_LINUX=$<IF:$<PLATFORM_ID:Linux>,1,0>)
17-
add_definitions(-DPLATFORM_MACOS=$<IF:$<PLATFORM_ID:Darwin>,1,0>)
18-
19-
add_definitions(-DCOMPILER_MSVC=$<IF:$<CXX_COMPILER_ID:MSVC>,1,0>)
20-
add_definitions(-DCOMPILER_APPLE_CLANG=$<IF:$<CXX_COMPILER_ID:AppleClang>,1,0>)
21-
add_definitions(-DCOMPILER_GCC=$<IF:$<CXX_COMPILER_ID:GNU>,1,0>)
13+
add_compile_definitions(
14+
BUILD_CONFIG_DEBUG=$<IF:$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>,1,0>
15+
PLATFORM_WINDOWS=$<IF:$<PLATFORM_ID:Windows>,1,0>
16+
PLATFORM_LINUX=$<IF:$<PLATFORM_ID:Linux>,1,0>
17+
PLATFORM_MACOS=$<IF:$<PLATFORM_ID:Darwin>,1,0>
18+
COMPILER_MSVC=$<IF:$<CXX_COMPILER_ID:MSVC>,1,0>
19+
COMPILER_APPLE_CLANG=$<IF:$<CXX_COMPILER_ID:AppleClang>,1,0>
20+
COMPILER_GCC=$<IF:$<CXX_COMPILER_ID:GNU>,1,0>
21+
)
2222

2323
if (${MSVC})
24-
add_compile_options(/bigobj /MD)
25-
add_definitions(-D_SILENCE_ALL_MS_EXT_DEPRECATION_WARNINGS=1)
26-
add_definitions(-DWIN32_LEAN_AND_MEAN)
27-
add_definitions(-DNOMINMAX=1)
24+
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDLL")
25+
add_compile_options(/bigobj)
26+
add_compile_definitions(
27+
_SILENCE_ALL_MS_EXT_DEPRECATION_WARNINGS=1
28+
WIN32_LEAN_AND_MEAN
29+
NOMINMAX=1
30+
)
2831
endif ()

CMake/Target.cmake

Lines changed: 16 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,13 @@ set(GENERATED_MIRROR_INFO_SRC_DIR ${GENERATED_DIR}/MirrorInfoSrc CACHE PATH "" F
99
set(BASE_TARGETS_FOLDER "${SUB_PROJECT_NAME}" CACHE STRING "" FORCE)
1010
set(AUX_TARGETS_FOLDER "${BASE_TARGETS_FOLDER}/Aux" CACHE STRING "" FORCE)
1111

12+
get_cmake_property(with_multi_config_generator GENERATOR_IS_MULTI_CONFIG)
13+
1214
if (${BUILD_TEST})
1315
enable_testing()
14-
add_definitions(-DBUILD_TEST=1)
16+
add_compile_definitions(BUILD_TEST=1)
1517
else()
16-
add_definitions(-DBUILD_TEST=0)
18+
add_compile_definitions(BUILD_TEST=0)
1719
endif()
1820

1921
if ("${SUB_PROJECT_NAME}" STREQUAL "")
@@ -107,7 +109,7 @@ function(exp_process_runtime_dependencies)
107109
endif ()
108110
if (NOT ${arg_NOT_INSTALL} AND NOT "${runtime_deps}" STREQUAL "")
109111
install(
110-
FILES ${runtime_deps} DESTINATION ${CMAKE_INSTALL_PREFIX}/${SUB_PROJECT_NAME}/Binaries
112+
FILES ${runtime_deps} DESTINATION ${SUB_PROJECT_NAME}/Binaries
111113
)
112114
endif ()
113115
endfunction()
@@ -141,8 +143,8 @@ function(exp_add_resources_copy_command)
141143

142144
list(APPEND copy_commands COMMAND ${CMAKE_COMMAND} -E copy_if_different ${src} $<TARGET_FILE_DIR:${arg_NAME}>/${dst})
143145

144-
get_filename_component(absolute_dst ${CMAKE_INSTALL_PREFIX}/${SUB_PROJECT_NAME}/Binaries/${dst} ABSOLUTE)
145-
get_filename_component(dst_dir ${absolute_dst} DIRECTORY)
146+
cmake_path(SET dst_path NORMALIZE "${SUB_PROJECT_NAME}/Binaries/${dst}")
147+
cmake_path(GET dst_path PARENT_PATH dst_dir)
146148
if (NOT ${arg_NOT_INSTALL})
147149
install(FILES ${src} DESTINATION ${dst_dir})
148150
endif ()
@@ -166,6 +168,7 @@ function(exp_gather_target_libs)
166168
string(REGEX MATCH "\\$\\<BUILD_INTERFACE.+\\>" match ${arg_NAME})
167169
if (match)
168170
set(${arg_OUTPUT} "" PARENT_SCOPE)
171+
return()
169172
endif ()
170173

171174
get_target_property(target_libs ${arg_NAME} LINK_LIBRARIES)
@@ -309,8 +312,7 @@ function(exp_add_executable)
309312
set_target_properties(${arg_NAME} PROPERTIES FOLDER ${BASE_TARGETS_FOLDER})
310313
endif ()
311314
312-
get_cmake_property(generated_is_multi_config GENERATOR_IS_MULTI_CONFIG)
313-
if (${generated_is_multi_config})
315+
if (${with_multi_config_generator})
314316
set(runtime_output_dir ${CMAKE_BINARY_DIR}/Dist/$<CONFIG>/${SUB_PROJECT_NAME}/Binaries)
315317
else ()
316318
set(runtime_output_dir ${CMAKE_BINARY_DIR}/Dist/${SUB_PROJECT_NAME}/Binaries)
@@ -411,8 +413,7 @@ function(exp_add_library)
411413
${arg_NAME}
412414
PRIVATE ${arg_SRC} ${generated_src}
413415
)
414-
get_cmake_property(generator_is_multi_config GENERATOR_IS_MULTI_CONFIG)
415-
if (${generator_is_multi_config})
416+
if (${with_multi_config_generator})
416417
set(runtime_output_dir ${CMAKE_BINARY_DIR}/Targets/${SUB_PROJECT_NAME}/${arg_NAME}/$<CONFIG>/Binaries)
417418
set(library_output_dir ${CMAKE_BINARY_DIR}/Targets/${SUB_PROJECT_NAME}/${arg_NAME}/$<CONFIG>/Binaries)
418419
set(archive_output_directory ${CMAKE_BINARY_DIR}/Targets/${SUB_PROJECT_NAME}/${arg_NAME}/$<CONFIG>/Lib)
@@ -504,65 +505,17 @@ function(exp_add_test)
504505
set(multiValueArgs SRC INC LINK LIB DEP_TARGET RES REFLECT)
505506
cmake_parse_arguments(arg "${options}" "${singleValueArgs}" "${multiValueArgs}" ${ARGN})
506507
507-
if (DEFINED arg_REFLECT)
508-
exp_add_mirror_info_source_generation_target(
509-
NAME ${arg_NAME}
510-
OUTPUT_SRC generated_src
511-
OUTPUT_TARGET_NAME generated_target
512-
SEARCH_DIR ${arg_REFLECT}
513-
PRIVATE_INC ${arg_INC}
514-
LIB ${arg_LIB}
515-
)
516-
endif()
517-
518-
add_executable(${arg_NAME})
519-
set_target_properties(${arg_NAME} PROPERTIES FOLDER ${BASE_TARGETS_FOLDER})
520-
521-
target_sources(
522-
${arg_NAME}
523-
PRIVATE ${arg_SRC} ${generated_src}
524-
)
525-
get_cmake_property(generator_is_multi_config GENERATOR_IS_MULTI_CONFIG)
526-
if (${generator_is_multi_config})
527-
set_target_properties(
528-
${arg_NAME} PROPERTIES
529-
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/Dist/$<CONFIG>/${SUB_PROJECT_NAME}/Binaries
530-
)
531-
else ()
532-
set_target_properties(
533-
${arg_NAME} PROPERTIES
534-
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/Dist/${SUB_PROJECT_NAME}/Binaries
535-
)
536-
endif ()
537-
538-
target_include_directories(
539-
${arg_NAME}
540-
PRIVATE ${arg_INC}
541-
)
542-
target_link_directories(
543-
${arg_NAME}
544-
PRIVATE ${arg_LINK}
545-
)
546-
target_link_libraries(
547-
${arg_NAME}
548-
PRIVATE Test ${arg_LIB}
549-
)
550-
exp_process_runtime_dependencies(
508+
exp_add_executable(
551509
NAME ${arg_NAME}
510+
SRC ${arg_SRC}
511+
INC ${arg_INC}
512+
LINK ${arg_LINK}
513+
LIB Test ${arg_LIB}
552514
DEP_TARGET ${arg_DEP_TARGET}
553-
NOT_INSTALL
554-
)
555-
exp_add_resources_copy_command(
556-
NAME ${arg_NAME}
557515
RES ${arg_RES}
516+
REFLECT ${arg_REFLECT}
558517
NOT_INSTALL
559518
)
560-
if (DEFINED arg_DEP_TARGET)
561-
add_dependencies(${arg_NAME} ${arg_DEP_TARGET})
562-
endif()
563-
if (DEFINED arg_REFLECT)
564-
add_dependencies(${arg_NAME} ${generated_target})
565-
endif()
566519
567520
add_test(
568521
NAME ${arg_NAME}

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ set(CMAKE_MAP_IMPORTED_CONFIG_DEBUG "Release" CACHE STRING "" FORCE)
1919
set(CMAKE_MAP_IMPORTED_CONFIG_RELWITHDEBINFO "Release" CACHE STRING "" FORCE)
2020
set(CMAKE_MAP_IMPORTED_CONFIG_MINSIZEREL "Release" CACHE STRING "" FORCE)
2121

22-
add_definitions(-DBUILD_EDITOR=$<BOOL:BUILD_EDITOR>)
22+
add_compile_definitions(BUILD_EDITOR=$<BOOL:${BUILD_EDITOR}>)
2323

2424
include(CMake/Common.cmake)
2525
include(CMake/Target.cmake)

Editor/CMakeLists.txt

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,25 +9,19 @@ qt_standard_project_setup()
99

1010
if (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
1111
set(platform_executable_hint MACOSX_BUNDLE)
12-
set(bundle_install_dest BUNDLE DESTINATION ${CMAKE_INSTALL_PREFIX}/${SUB_PROJECT_NAME}/Binaries)
12+
set(bundle_install_dest BUNDLE DESTINATION ${SUB_PROJECT_NAME}/Binaries)
1313
set(platform_fwk_dir ${QT_ROOT}/lib)
1414
endif ()
1515

16-
set(editor_includes Include)
1716
set(editor_qt_libs Qt6::Core Qt6::Gui Qt6::Widgets Qt6::WebEngineWidgets)
1817
set(editor_libs Core RHI Runtime httplib::httplib ${editor_qt_libs})
1918

20-
foreach (QT_LIB ${editor_qt_libs})
21-
string(REPLACE "::" "" QT_RAW_LIB ${QT_LIB})
22-
list(APPEND editor_includes ${${QT_RAW_LIB}_INCLUDE_DIRS})
23-
endforeach ()
24-
2519
exp_add_mirror_info_source_generation_target(
2620
NAME Editor
2721
OUTPUT_SRC EDITOR_MIRROR_GENERATED_SRC
2822
OUTPUT_TARGET_NAME EDITOR_MIRROR_GENERATED_TARGET
2923
SEARCH_DIR Include
30-
PRIVATE_INC ${editor_includes}
24+
PRIVATE_INC Include
3125
LIB ${editor_libs}
3226
FRAMEWORK_DIR ${platform_fwk_dir}
3327
)
@@ -49,7 +43,7 @@ else ()
4943
)
5044
endif ()
5145

52-
target_include_directories(Editor PRIVATE ${editor_includes})
46+
target_include_directories(Editor PRIVATE Include)
5347
target_link_libraries(Editor PRIVATE ${editor_libs})
5448

5549
if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
@@ -65,7 +59,7 @@ exp_process_runtime_dependencies(
6559
)
6660
install(
6761
TARGETS Editor
68-
RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/${SUB_PROJECT_NAME}/Binaries
62+
RUNTIME DESTINATION ${SUB_PROJECT_NAME}/Binaries
6963
${bundle_install_dest}
7064
)
7165
export(

Sample/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ function(add_sample)
4141
RES ${paths}
4242
NOT_INSTALL
4343
)
44-
add_dependencies(${arg_NAME} ${platform_dep_target})
4544
endfunction()
4645

4746
if (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")

0 commit comments

Comments
 (0)