ref: 8a3b5c1f7a70c74f2c7f0f0a8ff58d6ae3bda971
dir: /CMakeLists.txt/
cmake_minimum_required(VERSION 3.12) set(ASSETS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/assets") option(JAPANESE "Enable the Japanese-language build" OFF) option(FIX_BUGS "Fix various bugs in the game" ON) option(DEBUG_SAVE "Re-enable the ability to drag-and-drop save files onto the window" OFF) project(CSE2 LANGUAGES C CXX) #if(MSVC) # Statically-link the CRT (vcpkg static libs do this) # foreach(flag_var CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO) # if(${flag_var} MATCHES "/MD") # string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}") # endif() # endforeach() #endif() ## # CSE2 ## add_executable(CSE2 "src/ArmsItem.cpp" "src/ArmsItem.h" "src/Back.cpp" "src/Back.h" "src/Boss.cpp" "src/Boss.h" "src/BossAlmo1.cpp" "src/BossAlmo1.h" "src/BossAlmo2.cpp" "src/BossAlmo2.h" "src/BossBallos.cpp" "src/BossBallos.h" "src/BossFrog.cpp" "src/BossFrog.h" "src/BossIronH.cpp" "src/BossIronH.h" "src/BossLife.cpp" "src/BossLife.h" "src/BossOhm.cpp" "src/BossOhm.h" "src/BossPress.cpp" "src/BossPress.h" "src/BossTwinD.cpp" "src/BossTwinD.h" "src/BossX.cpp" "src/BossX.h" "src/BulHit.cpp" "src/BulHit.h" "src/Bullet.cpp" "src/Bullet.h" "src/Caret.cpp" "src/Caret.h" "src/CommonDefines.h" "src/Config.cpp" "src/Config.h" "src/Dialog.cpp" "src/Dialog.h" "src/Draw.cpp" "src/Draw.h" "src/Ending.cpp" "src/Ending.h" "src/Escape.cpp" "src/Escape.h" "src/Fade.cpp" "src/Fade.h" "src/Flags.cpp" "src/Flags.h" "src/Flash.cpp" "src/Flash.h" "src/Frame.cpp" "src/Frame.h" "src/Game.cpp" "src/Game.h" "src/Generic.cpp" "src/Generic.h" "src/GenericLoad.cpp" "src/GenericLoad.h" "src/Input.cpp" "src/Input.h" "src/KeyControl.cpp" "src/KeyControl.h" "src/Main.cpp" "src/Main.h" "src/Map.cpp" "src/Map.h" "src/MapName.cpp" "src/MapName.h" "src/MiniMap.cpp" "src/MiniMap.h" "src/MyChar.cpp" "src/MyChar.h" "src/MycHit.cpp" "src/MycHit.h" "src/MycParam.cpp" "src/MycParam.h" "src/NpcAct.h" "src/NpcAct000.cpp" "src/NpcAct020.cpp" "src/NpcAct040.cpp" "src/NpcAct060.cpp" "src/NpcAct080.cpp" "src/NpcAct100.cpp" "src/NpcAct120.cpp" "src/NpcAct140.cpp" "src/NpcAct160.cpp" "src/NpcAct180.cpp" "src/NpcAct200.cpp" "src/NpcAct220.cpp" "src/NpcAct240.cpp" "src/NpcAct260.cpp" "src/NpcAct280.cpp" "src/NpcAct300.cpp" "src/NpcAct320.cpp" "src/NpcAct340.cpp" "src/NpChar.cpp" "src/NpChar.h" "src/NpcHit.cpp" "src/NpcHit.h" "src/NpcTbl.cpp" "src/NpcTbl.h" "src/Organya.cpp" "src/Organya.h" "src/PixTone.cpp" "src/PixTone.h" "src/Profile.cpp" "src/Profile.h" "src/SelStage.cpp" "src/SelStage.h" "src/Shoot.cpp" "src/Shoot.h" "src/Sound.cpp" "src/Sound.h" "src/Stage.cpp" "src/Stage.h" "src/Star.cpp" "src/Star.h" "src/TextScr.cpp" "src/TextScr.h" "src/Triangle.cpp" "src/Triangle.h" "src/ValueView.cpp" "src/ValueView.h" "src/WindowsWrapper.h" ) # Handle options if(JAPANESE) set(BUILD_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/game_japanese") target_compile_definitions(CSE2 PRIVATE JAPANESE) else() set(BUILD_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/game_english") endif() if(FIX_BUGS) target_compile_definitions(CSE2 PRIVATE FIX_BUGS) endif() if(DEBUG_SAVE) target_compile_definitions(CSE2 PRIVATE DEBUG_SAVE) endif() # Make some tweaks if we're targetting Windows #if(WIN32) target_sources(CSE2 PRIVATE "${ASSETS_DIRECTORY}/resources/CSE2.rc") set_target_properties(CSE2 PROPERTIES WIN32_EXECUTABLE YES) # Disable the console window #endif() # Make some tweaks if we're using MSVC if(MSVC) target_compile_definitions(CSE2 PRIVATE _CRT_SECURE_NO_WARNINGS) # Disable warnings that normally fire up on MSVC when using "unsafe" functions instead of using MSVC's "safe" _s functions endif() # Make it so source files are recognized as UTF-8 by MSVC if(MSVC) target_compile_options(CSE2 PRIVATE "/utf-8") endif() # Force strict C90 set_target_properties(CSE2 PROPERTIES C_STANDARD 90 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF ) # Force strict C++98 set_target_properties(CSE2 PROPERTIES CXX_STANDARD 98 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF ) # Name debug builds "CSE2_debug", to distinguish them set_target_properties(CSE2 PROPERTIES DEBUG_OUTPUT_NAME "CSE2_debug") # Send executable to the build_en/build_jp directory set_target_properties(CSE2 PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${BUILD_DIRECTORY} RUNTIME_OUTPUT_DIRECTORY_RELEASE ${BUILD_DIRECTORY} RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL ${BUILD_DIRECTORY} RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${BUILD_DIRECTORY} RUNTIME_OUTPUT_DIRECTORY_DEBUG ${BUILD_DIRECTORY} ) # Link libraries target_link_libraries(CSE2 PRIVATE ddraw.lib dsound.lib Version.lib ShLwApi.Lib Imm32.lib WinMM.lib dxguid.lib) # Newer MSVC is missing `dinput.lib` if(MSVC AND MSVC_VERSION GREATER_EQUAL 1500) target_link_libraries(CSE2 PRIVATE dinput8.lib) else() target_link_libraries(CSE2 PRIVATE dinput.lib) endif()