下载最新正式版

链接:https://github.com/recastnavigation/recastnavigation/releases

Win平台编译

修改CMake文件

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
cmake_minimum_required(VERSION 3.22)

if ( WIN32 AND NOT CYGWIN AND NOT ( CMAKE_SYSTEM_NAME STREQUAL "WindowsStore" ) )
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /MT" CACHE STRING "")
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /MTd" CACHE STRING "")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT" CACHE STRING "")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd" CACHE STRING "")
endif ()

if ( IOS )
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fembed-bitcode")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fembed-bitcode")
endif ()


project(RecastDll)

find_path(RecastDll_PROJECT_DIR NAMES SConstruct
PATHS
${CMAKE_SOURCE_DIR}
NO_DEFAULT_PATH
)

MARK_AS_ADVANCED(RecastDll_PROJECT_DIR)

# 配置cpp文件
file(GLOB RECASTDLL_SOURCES
Source/*.cpp
../Detour/Source/*.cpp
../DetourCrowd/Source/*.cpp
../DetourTileCache/Source/*.cpp
../Recast/Source/*.cpp
)

# 配置头文件
include_directories(
Include
../DebugUtils/Include
../Detour/Include
../DetourCrowd/Include
../DetourTileCache/Include
../Recast/Include
)

macro(source_group_by_dir proj_dir source_files)
if(MSVC OR APPLE)
get_filename_component(sgbd_cur_dir ${proj_dir} ABSOLUTE)
foreach(sgbd_file ${${source_files}})
get_filename_component(sgbd_abs_file ${sgbd_file} ABSOLUTE)
file(RELATIVE_PATH sgbd_fpath ${sgbd_cur_dir} ${sgbd_abs_file})
string(REGEX REPLACE "\(.*\)/.*" \\1 sgbd_group_name ${sgbd_fpath})
string(COMPARE EQUAL ${sgbd_fpath} ${sgbd_group_name} sgbd_nogroup)
string(REPLACE "/" "\\" sgbd_group_name ${sgbd_group_name})
if(sgbd_nogroup)
set(sgbd_group_name "\\")
endif(sgbd_nogroup)
source_group(${sgbd_group_name} FILES ${sgbd_file})
endforeach(sgbd_file)
endif(MSVC OR APPLE)
endmacro(source_group_by_dir)

source_group_by_dir(${CMAKE_CURRENT_SOURCE_DIR} RECASTDLL_SOURCES)

if (APPLE)
if (IOS)
set(CMAKE_OSX_ARCHITECTURES "$(ARCHS_STANDARD)")
add_library(RecastDll STATIC ${RECASTDLL_SOURCES})
else ()
set(CMAKE_OSX_ARCHITECTURES "$(ARCHS_STANDARD_32_64_BIT)")
add_library(RecastDll MODULE ${RECASTDLL_SOURCES})
set_target_properties ( kcp PROPERTIES BUNDLE TRUE )
#set_target_properties ( kcp PROPERTIES FRAMEWORK TRUE )
#set_target_properties ( kcp PROPERTIES MACOSX_RPATH TRUE )
endif ()
else ( )
add_library(RecastDll SHARED ${RECASTDLL_SOURCES})
endif ( )

if ( WIN32 AND NOT CYGWIN )
target_compile_definitions (RecastDll PRIVATE DLL_EXPORTS)
endif ( )


make_win64.bat

1
2
3
4
5
6
7
8
9
mkdir build64 & pushd build64
cmake -G "Visual Studio 16 2019" -A x64 ..
popd
cmake --build build64 --config Release
md Plugins\x86_64
copy /Y build64\Release\RecastDll.dll Plugins\x86_64\RecastDll.dll
rmdir /S /Q build64
pause

make_win32.bat

1
2
3
4
5
6
7
8
mkdir build32 & pushd build32
cmake -G "Visual Studio 16 2019" ..
popd
cmake --build build32 --config Release
md Plugins\x86
copy /Y build32\Release\RecastDll.dll Plugins\x86\RecastDll.dll
rmdir /S /Q build32
pause

Android平台编译

Android.mk

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
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := RecastDll
# LOCAL_SRC_FILES := ikcp.c

# LOCAL_SRC_FILES := \
# Source/*.cpp \
# ../Detour/Source/*.cpp \
# ../DetourCrowd/Source/*.cpp \
# ../DetourTileCache/Source/*.cpp \
# ../Recast/Source/*.cpp

define walk
$(wildcard $(1)) $(foreach e, $(wildcard $(1)/*), $(call walk, $(e)))
endef


ALLFILES = $(call walk, $(LOCAL_PATH)/Source)
ALLFILES += $(call walk, $(LOCAL_PATH)/../Detour/Source)
ALLFILES += $(call walk, $(LOCAL_PATH)/../DetourCrowd/Source)
ALLFILES += $(call walk, $(LOCAL_PATH)/../DetourTileCache/Source)
ALLFILES += $(call walk, $(LOCAL_PATH)/../Recast/Source)

FILE_LIST := $(filter %.c, $(ALLFILES))
FILE_LIST += $(filter %.cpp, $(ALLFILES))
FILE_LIST += $(filter %.cc, $(ALLFILES))

LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)

LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/Include\
$(LOCAL_PATH)/../DebugUtils/Include\
$(LOCAL_PATH)/../Detour/Include\
$(LOCAL_PATH)/../DetourCrowd/Include\
$(LOCAL_PATH)/../DetourTileCache/Include\
$(LOCAL_PATH)/../Recast/Include

include $(BUILD_SHARED_LIBRARY)

Application.mk

1
2
3
4
5
6
7
APP_ABI:=all
NDK_TOOLCHAIN_VERSION:=clang3.5
APP_STL:=c++_static
# APP_STL:=c++_shared
APP_OPTIM:= release
APP_BUILD_SCRIPT := Android.mk

make_android.bat

1
2
3
4
5
6
# 打开cmd
set path=D:\soft\android-ndk-r10e
# 编译
ndk-build NDK_PROJECT_PATH=. NDK_APPLICATION_MK=Application.mk
# 没出错,在 libs文件夹下面
pause

make_android.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
if [ -z "$ANDROID_NDK" ]; then
export ANDROID_NDK=~/android-ndk-r10e
fi

mkdir -p build_v7a && cd build_v7a
cmake -DANDROID_ABI=armeabi-v7a -DCMAKE_TOOLCHAIN_FILE=../cmake/android.toolchain.cmake -DANDROID_TOOLCHAIN_NAME=arm-linux-androideabi-clang3.6 -DANDROID_NATIVE_API_LEVEL=android-9 ../
cd ..
cmake --build build_v7a --config Release
mkdir -p Plugins/Android/libs/armeabi-v7a/
cp build_v7a/libRecastDll.so Plugins/Android/libs/armeabi-v7a/libRecastDll.so
rm -rf build_v7a

mkdir -p build_x86 && cd build_x86
cmake -DANDROID_ABI=x86 -DCMAKE_TOOLCHAIN_FILE=../cmake/android.toolchain.cmake -DANDROID_TOOLCHAIN_NAME=x86-clang3.5 -DANDROID_NATIVE_API_LEVEL=android-9 ../
cd ..
cmake --build build_x86 --config Release
mkdir -p Plugins/Android/libs/x86/
cp build_x86/libRecastDll.so Plugins/Android/libs/x86/libRecastDll.so
rm -rf build_x86


MAC/IOS平台编译

make_ios.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mkdir -p build_ios && cd build_ios
cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/iOS.cmake -GXcode ../
cd ..
cmake --build build_ios --config Release
mkdir -p Plugins/iOS/
exist_armv7=`lipo -info build_ios/Release-iphoneos/libkcp.a | grep armv7 | wc -l`
exist_arm64=`lipo -info build_ios/Release-iphoneos/libkcp.a | grep arm64 | wc -l`
if [ $[exist_armv7] -eq 0 ]; then
echo "** ERROR **: No support for armv7, maybe XCode version is to high, use manual_build_ios instead!"
elif [ $[exist_arm64] -eq 0 ]; then
echo "** ERROR ** : No support for arm64, maybe XCode version is to high, use manual_build_ios instead!"
else
cp build_ios/Release-iphoneos/libRecastDll.a Plugins/iOS/libRecastDll.a
rm -rf build_io
fi

make_osx.sh

1
2
3
4
5
6
7
8
mkdir -p build_osx && cd build_osx
cmake -GXcode ../
cd ..
cmake --build build_osx --config Release
mkdir -p Plugins/RecastDll.bundle/Contents/MacOS/
cp build_osx/Release/RecastDll.bundle/Contents/MacOS/RecastDll Plugins/RecastDll.bundle/Contents/MacOS/RecastDll
rm -rf build_osx

待写,没有环境…

编译工程下载

编译工程点此下载