Skip to content

Commit f1741c6

Browse files
committed
Organise output binaries
Improve build and debugger experience in VS.
1 parent 6986bab commit f1741c6

File tree

7 files changed

+99
-17
lines changed

7 files changed

+99
-17
lines changed

CMakeLists.txt

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ project(OpenKO
99
option(OPENKO_BUILD_SERVERS "Build the server projects (default on)" ON)
1010
option(OPENKO_COMPILE_WARNINGS_AS_ERROR "Enable treating warnings as errors (default on)" ON)
1111

12+
# Define the bin directory; defaults to repo/bin/
13+
set(OPENKO_BIN_DIR "${CMAKE_BINARY_DIR}/bin/" CACHE PATH "Directory for final binaries")
14+
1215
if(WIN32)
1316
# Set the minimum Windows version
1417
set(_WIN32_WINNT "0x0A00" CACHE STRING "Minimum Windows version (default 0x0A00 - Windows 10)")
@@ -17,9 +20,22 @@ endif()
1720

1821
set(SPDLOG_ENABLE_PCH ON CACHE BOOL "Enable PCH in spdlog")
1922
set(NANODBC_FORCE_LIBCXX OFF CACHE BOOL "Force the use of libc++ (default off)")
20-
set(NANODBC_DISABLE_MSSQL_TVP ON "Disable MSSQL Table-valued parameters in nanodbc")
21-
set(NANODBC_DISABLE_NULL_ACCESS_ERROR ON "Disable null_access_error() exceptions in nanodbc")
22-
set(NANODBC_USE_UINT8_FOR_TINYINT ON "Enable use of uint8 to represent TINYINT fields instead of int16 in nanodbc")
23+
set(NANODBC_DISABLE_MSSQL_TVP ON CACHE BOOL "Disable MSSQL Table-valued parameters in nanodbc")
24+
set(NANODBC_DISABLE_NULL_ACCESS_ERROR ON CACHE BOOL "Disable null_access_error() exceptions in nanodbc")
25+
set(NANODBC_USE_UINT8_FOR_TINYINT ON CACHE BOOL "Enable use of uint8 to represent TINYINT fields instead of int16 in nanodbc")
26+
27+
# Setup output directories
28+
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${OPENKO_BIN_DIR}/${CMAKE_BUILD_TYPE}")
29+
30+
set(OPENKO_SERVER_MAP_SRC_DIR "${CMAKE_SOURCE_DIR}/Server/bin/MAP")
31+
set(OPENKO_SERVER_MAP_DST_DIR "${CMAKE_BINARY_DIR}/bin/MAP")
32+
set(OPENKO_SERVER_QUESTS_SRC_DIR "${CMAKE_SOURCE_DIR}/Server/bin/QUESTS")
33+
set(OPENKO_SERVER_QUESTS_DST_DIR "${CMAKE_BINARY_DIR}/bin/QUESTS")
34+
35+
# Multi-config generators
36+
foreach(CONFIG_TYPE Debug Release RelWithDebInfo MinSizeRel)
37+
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CONFIG_TYPE} "${OPENKO_BIN_DIR}")
38+
endforeach()
2339

2440
# Setup dependency dir
2541
set(OPENKO_DEPS_DIR ${CMAKE_SOURCE_DIR}/deps)
@@ -60,9 +76,9 @@ if(OPENKO_BUILD_SERVERS)
6076
fetchcontent_makeavailable(Boost)
6177
find_package(Boost 1.89.0 EXACT REQUIRED COMPONENTS interprocess)
6278

63-
add_subdirectory(deps/FTXUI)
79+
add_subdirectory(deps/FTXUI EXCLUDE_FROM_ALL)
6480

65-
add_subdirectory(deps/nanodbc)
81+
add_subdirectory(deps/nanodbc EXCLUDE_FROM_ALL)
6682
target_compile_features(nanodbc PUBLIC cxx_std_20)
6783

6884
# codecvt conversions are being deprecated.
@@ -72,11 +88,20 @@ if(OPENKO_BUILD_SERVERS)
7288
$<$<CXX_COMPILER_ID:Clang>:-Wno-deprecated-declarations>
7389
)
7490

75-
add_subdirectory(deps/db-models-cmake)
76-
add_subdirectory(deps/db-library-cmake)
91+
add_subdirectory(deps/db-models-cmake EXCLUDE_FROM_ALL)
92+
add_subdirectory(deps/db-library-cmake EXCLUDE_FROM_ALL)
7793

7894
add_subdirectory(Server/shared-server)
79-
95+
96+
add_custom_target(copy-server-assets ALL
97+
COMMENT "Copying server assets"
98+
COMMAND ${CMAKE_COMMAND} -E echo "Copying server MAP dir to ${OPENKO_SERVER_MAP_DST_DIR}"
99+
COMMAND ${CMAKE_COMMAND} -E copy_directory "${OPENKO_SERVER_MAP_SRC_DIR}" "${OPENKO_SERVER_MAP_DST_DIR}"
100+
COMMAND ${CMAKE_COMMAND} -E echo "Copying server QUESTS dir to ${OPENKO_SERVER_QUESTS_DST_DIR}"
101+
COMMAND ${CMAKE_COMMAND} -E copy_directory "${OPENKO_SERVER_QUESTS_SRC_DIR}" "${OPENKO_SERVER_QUESTS_DST_DIR}"
102+
COMMAND ${CMAKE_COMMAND} -E echo "Server assets copied."
103+
)
104+
80105
###############
81106
# Servers
82107
###############

Server/AIServer/CMakeLists.txt

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,11 @@ add_executable(AIServer
4040
ZoneEventThread.h
4141
)
4242

43+
# Ensure we require the server assets to be copied
44+
add_dependencies(AIServer copy-server-assets)
45+
4346
if(WIN32)
44-
target_sources(AIServer PRIVATE AIServer.rc)
47+
target_sources(AIServer PRIVATE AIServer.rc)
4548
endif()
4649

4750
# Use C++23
@@ -68,3 +71,13 @@ target_compile_options(AIServer PRIVATE
6871
$<$<CXX_COMPILER_ID:GNU>:-Wall>
6972
$<$<CXX_COMPILER_ID:Clang>:-Wall -Wextra>
7073
)
74+
75+
if(MSVC)
76+
set_property(TARGET AIServer PROPERTY
77+
VS_DEBUGGER_WORKING_DIRECTORY "$<TARGET_FILE_DIR:AIServer>"
78+
)
79+
endif()
80+
81+
add_custom_command(TARGET AIServer POST_BUILD
82+
COMMAND ${CMAKE_COMMAND} -E echo "$<TARGET_FILE:AIServer> has been built"
83+
)

Server/AIServer/Npc.cpp

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2936,7 +2936,7 @@ bool CNpc::StepNoPathMove(int /*nStep*/)
29362936
// NPC와 Target 과의 거리가 지정 범위보다 작은지 판단
29372937
int CNpc::IsCloseTarget(int nRange, int Flag)
29382938
{
2939-
__Vector3 vUser, vWillUser, vNpc, vDistance;
2939+
__Vector3 vUser = {}, vWillUser = {}, vNpc = {}, vDistance = {};
29402940
CUser* pUser = nullptr;
29412941
CNpc* pNpc = nullptr;
29422942
float fDis = 0.0f, fWillDis = 0.0f, fX = 0.0f, fZ = 0.0f;
@@ -3101,7 +3101,7 @@ int CNpc::GetTargetPath(int option)
31013101
CUser* targetUser = nullptr;
31023102
CNpc* npcTarget = nullptr;
31033103
float chaseRange = 0.0f;
3104-
__Vector3 vUser, vNpc, vDistance, vEnd22;
3104+
__Vector3 vUser = {}, vNpc = {}, vDistance = {}, vEnd22 = {};
31053105
float fDis = 0.0f;
31063106
float fDegree = 0.0f, fTargetDistance = 0.0f;
31073107
float fSurX = 0.0f, fSurZ = 0.0f;
@@ -3888,10 +3888,7 @@ void CNpc::MoveAttack()
38883888
{
38893889
char pBuf[1024] = {};
38903890
int index = 0;
3891-
__Vector3 vUser;
3892-
__Vector3 vNpc;
3893-
__Vector3 vDistance;
3894-
__Vector3 vEnd22;
3891+
__Vector3 vUser = {}, vNpc = {}, vDistance = {}, vEnd22 = {};
38953892
CUser* pUser = nullptr;
38963893
CNpc* pNpc = nullptr;
38973894
float fDis = 0.0f;
@@ -4173,7 +4170,7 @@ bool CNpc::GetTargetPos(float& x, float& z)
41734170
// Target 과 NPC 간에 길찾기를 다시한다.
41744171
bool CNpc::ResetPath()
41754172
{
4176-
float cur_x, cur_z;
4173+
float cur_x = 0.0f, cur_z = 0.0f;
41774174
GetTargetPos(cur_x, cur_z);
41784175

41794176
// TRACE(_T("ResetPath : user pos ,, x=%.2f, z=%.2f\n"), cur_x, cur_z);

Server/Aujard/CMakeLists.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,14 @@ target_compile_options(Aujard PRIVATE
3939
$<$<CXX_COMPILER_ID:GNU>:-Wall>
4040
$<$<CXX_COMPILER_ID:Clang>:-Wall -Wextra>
4141
)
42+
43+
if(MSVC)
44+
# Override default working directory for ease-of-use
45+
set_property(TARGET Aujard PROPERTY
46+
VS_DEBUGGER_WORKING_DIRECTORY "$<TARGET_FILE_DIR:Aujard>"
47+
)
48+
endif()
49+
50+
add_custom_command(TARGET Aujard POST_BUILD
51+
COMMAND ${CMAKE_COMMAND} -E echo "$<TARGET_FILE:Aujard> has been built"
52+
)

Server/Ebenezer/CMakeLists.txt

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,11 @@ add_executable(Ebenezer
5252
User.h
5353
)
5454

55+
# Ensure we require the server assets to be copied
56+
add_dependencies(AIServer copy-server-assets)
57+
5558
if(WIN32)
56-
target_sources(Ebenezer PRIVATE Ebenezer.rc)
59+
target_sources(Ebenezer PRIVATE Ebenezer.rc)
5760
endif()
5861

5962
# Use C++23
@@ -80,3 +83,14 @@ target_compile_options(Ebenezer PRIVATE
8083
$<$<CXX_COMPILER_ID:GNU>:-Wall>
8184
$<$<CXX_COMPILER_ID:Clang>:-Wall -Wextra>
8285
)
86+
87+
if(MSVC)
88+
# Override default working directory for ease-of-use
89+
set_property(TARGET Ebenezer PROPERTY
90+
VS_DEBUGGER_WORKING_DIRECTORY "$<TARGET_FILE_DIR:Ebenezer>"
91+
)
92+
endif()
93+
94+
add_custom_command(TARGET Ebenezer POST_BUILD
95+
COMMAND ${CMAKE_COMMAND} -E echo "$<TARGET_FILE:Ebenezer> has been built"
96+
)

Server/ItemManager/CMakeLists.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,3 +38,14 @@ target_compile_options(ItemManager PRIVATE
3838
$<$<CXX_COMPILER_ID:GNU>:-Wall>
3939
$<$<CXX_COMPILER_ID:Clang>:-Wall -Wextra>
4040
)
41+
42+
if(MSVC)
43+
# Override default working directory for ease-of-use
44+
set_property(TARGET ItemManager PROPERTY
45+
VS_DEBUGGER_WORKING_DIRECTORY "$<TARGET_FILE_DIR:ItemManager>"
46+
)
47+
endif()
48+
49+
add_custom_command(TARGET ItemManager POST_BUILD
50+
COMMAND ${CMAKE_COMMAND} -E echo "$<TARGET_FILE:ItemManager> has been built"
51+
)

Server/VersionManager/CMakeLists.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,14 @@ target_compile_options(VersionManager PRIVATE
3939
$<$<CXX_COMPILER_ID:GNU>:-Wall>
4040
$<$<CXX_COMPILER_ID:Clang>:-Wall -Wextra>
4141
)
42+
43+
if(MSVC)
44+
# Override default working directory for ease-of-use
45+
set_property(TARGET VersionManager PROPERTY
46+
VS_DEBUGGER_WORKING_DIRECTORY "$<TARGET_FILE_DIR:VersionManager>"
47+
)
48+
endif()
49+
50+
add_custom_command(TARGET VersionManager POST_BUILD
51+
COMMAND ${CMAKE_COMMAND} -E echo "$<TARGET_FILE:VersionManager> has been built"
52+
)

0 commit comments

Comments
 (0)