cpp
This commit is contained in:
parent
3c8c85819a
commit
22924f4583
@ -1,74 +1,497 @@
|
||||
project(${JUDGE_TARGET_NAME})
|
||||
cmake_minimum_required(VERSION 3.14.3)
|
||||
#cmake 3.14.3 首次发布于2019年3月14日
|
||||
#add_compile_definitions()最低要3.12.0才支持
|
||||
|
||||
set(MSG_NOTE "${MSG_NOTE} [${PROJECT_NAME}]")
|
||||
message("${MSG_NOTE} this project name ${PROJECT_NAME}")
|
||||
project(judge2.0) # LANGUAGES C CXX
|
||||
|
||||
add_compile_definitions(JUDGE_COMPILE_TARGET_SDK) #编译目标工程定义
|
||||
#add_compile_definitions(JUDGE_SHARED_EXPORT)
|
||||
#add_compile_definitions(JUDGE_SHARED_IMPORT)
|
||||
set(MSG_INFO "***[judge-cmake-info]***")
|
||||
set(MSG_NOTE "***[judge-cmake-note]***")
|
||||
set(MSG_WARN "***[judge-cmake-warn]***")
|
||||
set(MSG_ERROR "***[judge-cmake-error]***")
|
||||
# "NOTICE": 缺省时默认的选项,表示正常输出到控制台的重要提示信息
|
||||
# "WARNING": 表示输出到控制台的警告信息,但不会中断CMake的运行
|
||||
# "STATUS": 表示正常输出到控制台的一般提示性信息,和CMake自动输出的提示信息一样,每一条自动以--开头,通常不需要关注
|
||||
# "FATAL_ERROR": 表示致命错误,CMake通常不会执行到此,如果执行到了这条语句,就会输出这里的信息并停止生成构建系统
|
||||
|
||||
set(JUDGE_INCLUDE_CURRENT
|
||||
${PROJECT_SOURCE_DIR}
|
||||
)
|
||||
message("${MSG_NOTE} ******************************************************")
|
||||
|
||||
file(GLOB_RECURSE JUDGE_SOURCE_CURRENT
|
||||
${PROJECT_SOURCE_DIR}/*.h*
|
||||
${PROJECT_SOURCE_DIR}/*.c*
|
||||
)
|
||||
# 启用项目文件夹功能。当这个属性被设置为ON时,CMake会根据项目的目录结构自动在生成的项目文件中创建文件夹,以更好地组织项目文件。
|
||||
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
||||
set(CMAKE_CXX_STANDARD 17) # 注意:windows下可以是C++11 linux下必须是C++14 gtest linux下要C++14
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin)
|
||||
set(LIBRARY_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin)
|
||||
set(CMAKE_INCLUDE_CURRENT_DIR ON) # 在查找头文件时包括当前目录
|
||||
|
||||
set(JUDGE_LIB_DIR_CURRENT
|
||||
#设置编译输出评判SDK库名称
|
||||
set(JUDGE_TARGET_NAME "JudgeSdk")
|
||||
|
||||
)
|
||||
|
||||
set(JUDGE_LIB_FILE_CURRENT
|
||||
|
||||
)
|
||||
|
||||
source_group(\\ FILES ${JUDGE_SOURCE_CURRENT})
|
||||
|
||||
include_directories(
|
||||
${JUDGE_INCLUDE}
|
||||
${JUDGE_INCLUDE_PLATFORM}
|
||||
${JUDGE_INCLUDE_CURRENT}
|
||||
)
|
||||
|
||||
link_directories(
|
||||
${JUDGE_LIB_DIR}
|
||||
${JUDGE_LIB_DIR_PLATFORM}
|
||||
${JUDGE_LIB_DIR_CURRENT}
|
||||
)
|
||||
|
||||
if(BUILD_SHARED_LIBS)
|
||||
message("${MSG_NOTE} BUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} build shared dll")
|
||||
add_compile_definitions(JUDGE_SHARED_EXPORT) #cmake version must be greater than 3.12.0
|
||||
#编译参数设置编译静态库还是动态库
|
||||
#除非使用者主动设置BUILD_SHARED_LIBS=OFF才会生成静态库,否则全部编译输出动态库,
|
||||
#BUILD_SHARED_LIBS不设置或者设置成BUILD_SHARED_LIBS=ON也输出动态库
|
||||
message("${MSG_NOTE} BUILD_SHARED_LIBS=${BUILD_SHARED_LIBS}")
|
||||
if(NOT DEFINED BUILD_SHARED_LIBS)
|
||||
option(BUILD_SHARED_LIBS "" ON)
|
||||
message("${MSG_NOTE} NOT DEFINED BUILD_SHARED_LIBS=${BUILD_SHARED_LIBS}")
|
||||
else()
|
||||
message("${MSG_NOTE} BUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} build static lib")
|
||||
message("${MSG_NOTE} IS DEFINED BUILD_SHARED_LIBS=${BUILD_SHARED_LIBS}")
|
||||
endif()
|
||||
|
||||
# BUILD_SHARED_LIBS ON的时候生成的是隐式调用的动态库 如果生成显示调用动态库 加上SHARED参数
|
||||
add_library(${JUDGE_TARGET_NAME}
|
||||
${JUDGE_SOURCE}
|
||||
${JUDGE_SOURCE_PLATFORM}
|
||||
${JUDGE_SOURCE_CURRENT}
|
||||
)
|
||||
#set(CMAKE_DEBUG_POSTFIX "_d")
|
||||
|
||||
# PUBLIC 在public后面的库会被Link到你的target中,并且里面的符号也会被导出,提供给第三方使用。
|
||||
# PRIVATE 在private后面的库仅被link到你的target中,并且终结掉,第三方不能感知你调了啥库
|
||||
# INTERFACE 在interface后面引入的库不会被链接到你的target中,只会导出符号
|
||||
# 本质上可以使用public 来解决,可以减少坑。
|
||||
target_link_libraries(${JUDGE_TARGET_NAME} PUBLIC
|
||||
${JUDGE_LIB_FILE}
|
||||
${JUDGE_LIB_FILE_PLATFORM}
|
||||
${JUDGE_LIB_FILE_CURRENT}
|
||||
)
|
||||
#打开编译函数执行耗时统计
|
||||
#add_compile_definitions(JUDGE_USE_TCMALLOC)
|
||||
#option(JUDGE_USE_TCMALLOC "" OFF)
|
||||
|
||||
# 设置动态库的版本号
|
||||
#set(CMAKE_SHARED_LIBRARY_SONAME_VERSION 1)
|
||||
|
||||
#CMAKE_STATIC_LIBRARY_SUFFIX STREQUAL "lib" OR
|
||||
if(CMAKE_SHARED_LIBRARY_PREFIX STREQUAL lib)
|
||||
set_target_properties(${JUDGE_TARGET_NAME} PROPERTIES OUTPUT_NAME ${JUDGE_TARGET_NAME}) #VERSION 1.0.0 SOVERSION 1.0
|
||||
#set(CMAKE_SYSTEM_NAME OHOS)
|
||||
#设置编译的系统平台 # JUDGE_OS_WIN JUDGE_OS_LINUX JUDGE_OS_OHOS JUDGE_OS_ANDROID
|
||||
message("${MSG_NOTE} current system name is ${CMAKE_SYSTEM_NAME}")
|
||||
if(CMAKE_SYSTEM_NAME MATCHES Windows)
|
||||
option(JUDGE_OS_WIN "" ON)
|
||||
elseif(CMAKE_SYSTEM_NAME MATCHES Linux)
|
||||
option(JUDGE_OS_LINUX "" ON)
|
||||
elseif(CMAKE_SYSTEM_NAME MATCHES OHOS)
|
||||
option(JUDGE_OS_OHOS "" ON)
|
||||
elseif(CMAKE_SYSTEM_NAME MATCHES Android)
|
||||
option(JUDGE_OS_ANDROID "" ON)
|
||||
else()
|
||||
set_target_properties(${JUDGE_TARGET_NAME} PROPERTIES OUTPUT_NAME lib${JUDGE_TARGET_NAME}) #VERSION 1.0.0 SOVERSION 1.0
|
||||
message(FATAL_ERROR "${MSG_ERROR} unknown operating system platform!")
|
||||
return()
|
||||
endif()
|
||||
|
||||
if(JUDGE_OS_WIN)
|
||||
add_compile_definitions(JUDGE_OS_WIN)
|
||||
elseif(JUDGE_OS_LINUX)
|
||||
add_compile_definitions(JUDGE_OS_LINUX)
|
||||
elseif(JUDGE_OS_OHOS)
|
||||
add_compile_definitions(JUDGE_OS_OHOS)
|
||||
elseif(JUDGE_OS_ANDROID)
|
||||
add_compile_definitions(JUDGE_OS_ANDROID)
|
||||
else()
|
||||
message(FATAL_ERROR "${MSG_ERROR} unknown operating system platform!")
|
||||
return()
|
||||
endif()
|
||||
|
||||
message("${MSG_NOTE} now compiler is ${CMAKE_C_COMPILER_ID}")
|
||||
# 不同编译器编译属性设置
|
||||
if(CMAKE_C_COMPILER_ID MATCHES MSVC)
|
||||
add_compile_definitions(JUDGE_COMPILER_MSVC) #option(JUDGE_COMPILER_MSVC "" ON)
|
||||
elseif(CMAKE_C_COMPILER_ID MATCHES Clang)
|
||||
add_compile_definitions(JUDGE_COMPILER_CLANG) #option(JUDGE_COMPILER_CLANG "" ON)
|
||||
elseif(CMAKE_C_COMPILER_ID MATCHES GNU)
|
||||
add_compile_definitions(JUDGE_COMPILER_GCC) #option(JUDGE_COMPILER_GCC "" ON)
|
||||
else()
|
||||
message(FATAL_ERROR "${MSG_ERROR} unknown compiler!")
|
||||
return()
|
||||
endif()
|
||||
|
||||
message("${MSG_NOTE} CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}")
|
||||
##鸿蒙和安卓强制release模式编译
|
||||
if(JUDGE_OS_OHOS OR JUDGE_OS_ANDROID)
|
||||
set(CMAKE_BUILD_TYPE "Release")
|
||||
endif()
|
||||
#只有主动设置为Debug模式编译才采用Debug模式
|
||||
if(CMAKE_BUILD_TYPE AND (CMAKE_BUILD_TYPE STREQUAL "Debug"))
|
||||
message("${MSG_NOTE} CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} debug")
|
||||
set(CMAKE_BUILD_TYPE "Debug")
|
||||
add_compile_definitions(_DEBUG)
|
||||
else()
|
||||
message("${MSG_NOTE} CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} release")
|
||||
set(CMAKE_BUILD_TYPE "Release")
|
||||
add_compile_definitions(NDEBUG)
|
||||
endif()
|
||||
|
||||
# 不同操作系统编译属性设置
|
||||
# UNIX 与 CMAKE_HOST_UNIX 等价
|
||||
# WIN32 与 CMAKE_HOST_WIN32 等价
|
||||
if(WIN32)
|
||||
message("${MSG_NOTE} host is windows system.")
|
||||
add_compile_options(/W3 /wd4100 /wd4309 /wd4068 /wd4244 /wd4626 /wd4251 /wd4267 /wd4065 /wd4189 /wd4717 /wd4505)
|
||||
|
||||
# C2026: 字符串太大,已截断尾部字符(/Zc:strictStrings 或 /Tc编译器开关)
|
||||
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} $ENV{CFLAGS} /bigobj")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} $ENV{CXXFLAGS} /bigobj")
|
||||
|
||||
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /MTd /Od") # /Od 禁止优化编译
|
||||
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /MT /O2")
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd /Od")
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT /O2") # /MD
|
||||
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /INCREMENTAL:YES" )
|
||||
#set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /STACK:104857600")
|
||||
|
||||
|
||||
elseif(UNIX)
|
||||
message("${MSG_NOTE} host is linux system.")
|
||||
|
||||
add_compile_options(
|
||||
-W -Wall
|
||||
-Wno-unused-function
|
||||
-Wno-unused-parameter
|
||||
-Wno-unused-variable
|
||||
-Wno-unused-but-set-variable
|
||||
# -Wno-tautological-constant-out-of-range-compare ## for android
|
||||
# -Wno-suggest-override
|
||||
# -Winconsistent-missing-override
|
||||
# -Wno-sign-compare
|
||||
# -Wno-comment # 当'/*'出现在 '/* ... */'注释中,或者'\'出现在'// ...'注释结尾处时,使用-Wcomment会给出警告。
|
||||
)
|
||||
|
||||
if(CMAKE_C_COMPILER_ID STREQUAL "Clang")
|
||||
add_compile_options(-Wno-tautological-constant-out-of-range-compare) ## for android
|
||||
endif()
|
||||
|
||||
#add_compile_options(-Wa,-mbig-obj)
|
||||
#add_compile_options(-static-libstdc++ -static-libgcc)
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} $ENV{CFLAGS} -no-pie -pthread")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} $ENV{CXXFLAGS} -no-pie -pthread")
|
||||
# PIE是一种生成地址无关可执行程序 #用gpertools检测性能和内存泄露会用到,不然定位不到
|
||||
|
||||
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0 -g -ggdb")
|
||||
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3")
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -g -ggdb")
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3")
|
||||
|
||||
# -fPIC选项的生效阶段在编译阶段,使用-fPIC选项编译的.o文件会生成位置无关的代码,
|
||||
# 通常在linux下用gcc编译动态库时都会加上一个-fPIC选项来生成位置无关代码。
|
||||
# 如果你的静态库可能会被动态库使用,那么静态库编译的时候就也需要-fPIC选项。
|
||||
if(BUILD_SHARED_LIBS)
|
||||
add_compile_options(-fPIC)
|
||||
endif()
|
||||
|
||||
# -w 的意思是关闭编译时的警告,也就是编译后不显示任何warning,因为有时在编译之后编译器会显示一些例如数据转换之类的警告,这些警告是我们平时可以忽略的。
|
||||
# -Wall 选项意思是编译后显示所有警告。
|
||||
# -W 选项类似-Wall,会显示警告,但是只显示编译器认为会出现错误的警告。比如函数返回类型void,return 0;
|
||||
|
||||
#OPTION(USE_32BITS "Compile for 32bits processors(linux only)" OFF)
|
||||
#set(CMAKE_C_FLAGS_DEBUG "$ENV{CFLAGS} -O0 -Wall -g -ggdb")
|
||||
#set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")
|
||||
|
||||
else()
|
||||
message(FATAL_ERROR "${MSG_ERROR} unknown system!")
|
||||
return()
|
||||
endif()
|
||||
|
||||
if(JUDGE_OS_WIN)
|
||||
message("${MSG_NOTE} now compiler platform JUDGE_OS_WIN")
|
||||
|
||||
set(JUDGE_INCLUDE_PLATFORM
|
||||
)
|
||||
|
||||
file(GLOB_RECURSE JUDGE_SOURCE_PLATFORM
|
||||
)
|
||||
|
||||
set(JUDGE_LIB_DIR_PLATFORM
|
||||
|
||||
)
|
||||
|
||||
set(JUDGE_LIB_FILE_PLATFORM
|
||||
|
||||
)
|
||||
|
||||
elseif(JUDGE_OS_LINUX)
|
||||
message("${MSG_NOTE} now compiler platform JUDGE_OS_LINUX")
|
||||
|
||||
set(JUDGE_INCLUDE_PLATFORM
|
||||
)
|
||||
|
||||
file(GLOB_RECURSE JUDGE_SOURCE_PLATFORM
|
||||
)
|
||||
|
||||
set(JUDGE_LIB_DIR_PLATFORM
|
||||
|
||||
)
|
||||
|
||||
set(JUDGE_LIB_FILE_PLATFORM
|
||||
stdc++fs
|
||||
)
|
||||
|
||||
elseif(JUDGE_OS_OHOS)
|
||||
message("${MSG_NOTE} now compiler platform JUDGE_OS_OHOS")
|
||||
|
||||
set(JUDGE_INCLUDE_PLATFORM
|
||||
${CMAKE_SYSROOT}/usr/include/ace/xcomponent
|
||||
${CMAKE_SYSROOT}/usr/include/native_window
|
||||
${CMAKE_SOURCE_DIR}/sdk/api/js
|
||||
${CMAKE_SOURCE_DIR}/third/harmony/include #本地开发看代码用的
|
||||
${CMAKE_SOURCE_DIR}/third/harmony/include/ace #本地开发看代码用的
|
||||
${CMAKE_SOURCE_DIR}/third/harmony/include/ace/xcomponent #本地开发看代码用的
|
||||
${CMAKE_SOURCE_DIR}/third/harmony/include/native_window #本地开发看代码用的
|
||||
)
|
||||
|
||||
file(GLOB_RECURSE JUDGE_SOURCE_PLATFORM
|
||||
${CMAKE_SOURCE_DIR}/sdk/api/js/*.*
|
||||
)
|
||||
|
||||
set(JUDGE_LIB_DIR_PLATFORM
|
||||
#${CMAKE_SOURCE_DIR}/third/harmony
|
||||
#aarch64-linux-ohos arm-linux-ohos x86_64-linux-ohos
|
||||
)
|
||||
|
||||
set(JUDGE_LIB_FILE_PLATFORM
|
||||
ace_napi.z
|
||||
uv
|
||||
ace_ndk.z
|
||||
native_window #//for-surface-nativeXComponent
|
||||
hilog_ndk.z
|
||||
)
|
||||
|
||||
elseif(JUDGE_OS_ANDROID)
|
||||
message("${MSG_NOTE} now compiler platform JUDGE_OS_ANDROID")
|
||||
|
||||
set(JUDGE_INCLUDE_PLATFORM
|
||||
${CMAKE_SOURCE_DIR}/third/android/include #本地开发看代码用的
|
||||
${CMAKE_SOURCE_DIR}/sdk/api/jni
|
||||
)
|
||||
|
||||
file(GLOB_RECURSE JUDGE_SOURCE_PLATFORM
|
||||
${CMAKE_SOURCE_DIR}/sdk/api/jni/*.*
|
||||
)
|
||||
|
||||
set(JUDGE_LIB_DIR_PLATFORM
|
||||
|
||||
)
|
||||
|
||||
set(JUDGE_LIB_FILE_PLATFORM
|
||||
android
|
||||
log
|
||||
)
|
||||
|
||||
else()
|
||||
message("${MSG_ERROR} unknown operating system!")
|
||||
return()
|
||||
endif()
|
||||
|
||||
|
||||
#*********************************************************
|
||||
|
||||
#设置全局包含的库文件路径
|
||||
set(JUDGE_LIB_DIR
|
||||
|
||||
)
|
||||
|
||||
#设置全局包含的库文件名称
|
||||
set(JUDGE_LIB_FILE
|
||||
|
||||
)
|
||||
|
||||
#设置全局包含的头文件
|
||||
set(JUDGE_INCLUDE
|
||||
#${CMAKE_CURRENT_SOURCE_DIR}
|
||||
#${PROJECT_SOURCE_DIR}
|
||||
#${CMAKE_SOURCE_DIR}
|
||||
${CMAKE_SOURCE_DIR}/third
|
||||
${CMAKE_SOURCE_DIR}/third/tinyxml2-9.0.0
|
||||
${CMAKE_SOURCE_DIR}/third/jsoncpp-1.9.5
|
||||
${CMAKE_SOURCE_DIR}/third/inih
|
||||
${CMAKE_SOURCE_DIR}/third/cpp-md5
|
||||
${CMAKE_SOURCE_DIR}/third/libb64
|
||||
${CMAKE_SOURCE_DIR}/third/AES
|
||||
${CMAKE_SOURCE_DIR}/third/CImg-v.3.2.6
|
||||
${CMAKE_SOURCE_DIR}/third/nlohmann
|
||||
${CMAKE_SOURCE_DIR}/third/nlohmann/detail
|
||||
${CMAKE_SOURCE_DIR}/third/nlohmann/detail/conversions
|
||||
${CMAKE_SOURCE_DIR}/third/nlohmann/detail/input
|
||||
${CMAKE_SOURCE_DIR}/third/nlohmann/detail/iterators
|
||||
${CMAKE_SOURCE_DIR}/third/nlohmann/detail/meta
|
||||
${CMAKE_SOURCE_DIR}/third/nlohmann/detail/output
|
||||
${CMAKE_SOURCE_DIR}/third/nlohmann/thirdparty/hedley
|
||||
|
||||
#${CMAKE_SOURCE_DIR}/sdk
|
||||
${CMAKE_SOURCE_DIR}/sdk/api
|
||||
${CMAKE_SOURCE_DIR}/sdk/api/cxx
|
||||
${CMAKE_SOURCE_DIR}/sdk/api/js
|
||||
${CMAKE_SOURCE_DIR}/sdk/api/jni
|
||||
${CMAKE_SOURCE_DIR}/sdk/api/include
|
||||
${CMAKE_SOURCE_DIR}/sdk/api/platform
|
||||
${CMAKE_SOURCE_DIR}/sdk/common
|
||||
${CMAKE_SOURCE_DIR}/sdk/utility
|
||||
${CMAKE_SOURCE_DIR}/sdk/parser
|
||||
${CMAKE_SOURCE_DIR}/sdk/graphic
|
||||
${CMAKE_SOURCE_DIR}/sdk/database
|
||||
${CMAKE_SOURCE_DIR}/sdk/database/mark
|
||||
${CMAKE_SOURCE_DIR}/sdk/database/sysset
|
||||
${CMAKE_SOURCE_DIR}/sdk/database/carinfo
|
||||
${CMAKE_SOURCE_DIR}/sdk/database/sysparm
|
||||
${CMAKE_SOURCE_DIR}/sdk/database/mappoint
|
||||
${CMAKE_SOURCE_DIR}/sdk/database/iteminfo
|
||||
${CMAKE_SOURCE_DIR}/sdk/exam
|
||||
${CMAKE_SOURCE_DIR}/sdk/track
|
||||
${CMAKE_SOURCE_DIR}/sdk/survey
|
||||
${CMAKE_SOURCE_DIR}/sdk/survey/car
|
||||
${CMAKE_SOURCE_DIR}/sdk/survey/sub2
|
||||
${CMAKE_SOURCE_DIR}/sdk/survey/sub3
|
||||
${CMAKE_SOURCE_DIR}/sdk/judge
|
||||
${CMAKE_SOURCE_DIR}/sdk/judge/sub2
|
||||
${CMAKE_SOURCE_DIR}/sdk/judge/sub3
|
||||
${CMAKE_SOURCE_DIR}/sdk/assistdrive
|
||||
${CMAKE_SOURCE_DIR}/sdk/assistdrive/navigate
|
||||
${CMAKE_SOURCE_DIR}/sdk/assistdrive/track
|
||||
${CMAKE_SOURCE_DIR}/sdk/assistdrive/track/libTrack
|
||||
${CMAKE_SOURCE_DIR}/sdk/assistdrive/track/pathTrack
|
||||
${CMAKE_SOURCE_DIR}/sdk/assistdrive/track/pathTrack/purp
|
||||
${CMAKE_SOURCE_DIR}/sdk/assistdrive/track/teachTrack
|
||||
${CMAKE_SOURCE_DIR}/sdk/assistdrive/track/trackInfo
|
||||
${CMAKE_SOURCE_DIR}/sdk/assistdrive/track/trackMode
|
||||
${CMAKE_SOURCE_DIR}/sdk/assistdrive/util
|
||||
${CMAKE_SOURCE_DIR}/sdk/assistdrive/wirecontrol
|
||||
${CMAKE_SOURCE_DIR}/sdk/assistdrive/field
|
||||
)
|
||||
|
||||
#设置全局包含的源文件
|
||||
file(GLOB_RECURSE JUDGE_SOURCE
|
||||
${CMAKE_SOURCE_DIR}/third/*.*
|
||||
${CMAKE_SOURCE_DIR}/third/tinyxml2-9.0.0/*.*
|
||||
${CMAKE_SOURCE_DIR}/third/jsoncpp-1.9.5/*.*
|
||||
${CMAKE_SOURCE_DIR}/third/inih/*.*
|
||||
${CMAKE_SOURCE_DIR}/third/cpp-md5/*.*
|
||||
${CMAKE_SOURCE_DIR}/third/libb64/*.*
|
||||
${CMAKE_SOURCE_DIR}/third/AES/*.*
|
||||
${CMAKE_SOURCE_DIR}/third/CImg-v.3.2.6/*.*
|
||||
${CMAKE_SOURCE_DIR}/third/nlohmann/*.*
|
||||
${CMAKE_SOURCE_DIR}/third/nlohmann/detail/*.*
|
||||
${CMAKE_SOURCE_DIR}/third/nlohmann/detail/conversions/*.*
|
||||
${CMAKE_SOURCE_DIR}/third/nlohmann/detail/input/*.*
|
||||
${CMAKE_SOURCE_DIR}/third/nlohmann/detail/iterators/*.*
|
||||
${CMAKE_SOURCE_DIR}/third/nlohmann/detail/meta/*.*
|
||||
${CMAKE_SOURCE_DIR}/third/nlohmann/detail/output/*.*
|
||||
${CMAKE_SOURCE_DIR}/third/nlohmann/thirdparty/hedley/*.*
|
||||
|
||||
#${CMAKE_SOURCE_DIR}/sdk/*.*
|
||||
${CMAKE_SOURCE_DIR}/sdk/api/*.*
|
||||
${CMAKE_SOURCE_DIR}/sdk/api/cxx/*.*
|
||||
${CMAKE_SOURCE_DIR}/sdk/api/js/*.*
|
||||
${CMAKE_SOURCE_DIR}/sdk/api/jni/*.*
|
||||
${CMAKE_SOURCE_DIR}/sdk/api/include/*.*
|
||||
${CMAKE_SOURCE_DIR}/sdk/api/platform/*.*
|
||||
${CMAKE_SOURCE_DIR}/sdk/common/*.*
|
||||
${CMAKE_SOURCE_DIR}/sdk/utility/*.*
|
||||
${CMAKE_SOURCE_DIR}/sdk/parser/*.*
|
||||
${CMAKE_SOURCE_DIR}/sdk/graphic/*.*
|
||||
${CMAKE_SOURCE_DIR}/sdk/database/*.*
|
||||
${CMAKE_SOURCE_DIR}/sdk/database/mark/*.*
|
||||
${CMAKE_SOURCE_DIR}/sdk/database/sysset/*.*
|
||||
${CMAKE_SOURCE_DIR}/sdk/database/carinfo/*.*
|
||||
${CMAKE_SOURCE_DIR}/sdk/database/sysparm/*.*
|
||||
${CMAKE_SOURCE_DIR}/sdk/database/mappoint/*.*
|
||||
${CMAKE_SOURCE_DIR}/sdk/exam/*.*
|
||||
${CMAKE_SOURCE_DIR}/sdk/track/*.*
|
||||
${CMAKE_SOURCE_DIR}/sdk/survey/*.*
|
||||
${CMAKE_SOURCE_DIR}/sdk/survey/car/*.*
|
||||
${CMAKE_SOURCE_DIR}/sdk/survey/sub2/*.*
|
||||
${CMAKE_SOURCE_DIR}/sdk/survey/sub3/*.*
|
||||
${CMAKE_SOURCE_DIR}/sdk/judge/*.*
|
||||
${CMAKE_SOURCE_DIR}/sdk/judge/sub2/*.*
|
||||
${CMAKE_SOURCE_DIR}/sdk/judge/sub3/*.*
|
||||
${CMAKE_SOURCE_DIR}/sdk/assistdrive/*.*
|
||||
${CMAKE_SOURCE_DIR}/sdk/assistdrive/track/*.*
|
||||
${CMAKE_SOURCE_DIR}/sdk/assistdrive/util/*.*
|
||||
${CMAKE_SOURCE_DIR}/sdk/assistdrive/wirecontrol/*.*
|
||||
${CMAKE_SOURCE_DIR}/sdk/assistdrive/field/*.*
|
||||
)
|
||||
|
||||
#设置编译的包含的目标工程
|
||||
add_subdirectory(${CMAKE_SOURCE_DIR}/sdk)
|
||||
if(JUDGE_OS_WIN OR JUDGE_OS_LINUX)
|
||||
add_subdirectory(${CMAKE_SOURCE_DIR}/toolkit)
|
||||
add_subdirectory(${CMAKE_SOURCE_DIR}/test)
|
||||
endif()
|
||||
|
||||
#*****************************************************
|
||||
## 下面是输出一些当前编译参数系统相关的信息
|
||||
#*****************************************************
|
||||
|
||||
function(showOutputInfo)
|
||||
|
||||
message(STATUS "${MSG_INFO} ****************system info**************************************")
|
||||
|
||||
message(STATUS "${MSG_INFO} ENV{CFLAGS}=$ENV{CFLAGS}")
|
||||
message(STATUS "${MSG_INFO} ENV{CXXFLAGS=$ENV{CXXFLAGS}")
|
||||
|
||||
message(STATUS "${MSG_INFO} CMAKE_DEFAULT_BUILD_TYPE = ${CMAKE_DEFAULT_BUILD_TYPE}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_C_COMPILER = ${CMAKE_C_COMPILER}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_CXX_COMPILER = ${CMAKE_CXX_COMPILER}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_C_COMPILER_ID = ${CMAKE_C_COMPILER_ID}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_CXX_COMPILER_ID = ${CMAKE_CXX_COMPILER_ID}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_C_COMPILER_VERSION = ${CMAKE_C_COMPILER_VERSION}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_CXX_COMPILER_VERSION = ${CMAKE_CXX_COMPILER_VERSION}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_SYSTEM = ${CMAKE_SYSTEM}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_SYSTEM_NAME = ${CMAKE_SYSTEM_NAME}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_SYSTEM_VERSION = ${CMAKE_SYSTEM_VERSION}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_SYSTEM_PROCESSOR = ${CMAKE_SYSTEM_PROCESSOR}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_HOST_SYSTEM = ${CMAKE_HOST_SYSTEM}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_HOST_SYSTEM_NAME = ${CMAKE_HOST_SYSTEM_NAME}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_HOST_SYSTEM_VERSION = ${CMAKE_HOST_SYSTEM_VERSION}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_HOST_SYSTEM_PROCESSOR = ${CMAKE_HOST_SYSTEM_PROCESSOR}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_SIZEOF_VOID_P = ${CMAKE_SIZEOF_VOID_P}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_MINIMUM_REQUIRED_VERSION = ${CMAKE_MINIMUM_REQUIRED_VERSION}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_VERSION = ${CMAKE_VERSION}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_CXX_STANDARD = ${CMAKE_CXX_STANDARD}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_CXX_STANDARD_REQUIRED = ${CMAKE_CXX_STANDARD_REQUIRED}")
|
||||
|
||||
|
||||
# 运行时目标文件(exe、dll)的输出位置
|
||||
message(STATUS "${MSG_INFO} CMAKE_RUNTIME_OUTPUT_DIRECTORY = ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}")
|
||||
# 存档目标文件(lib、a)的输出位置
|
||||
message(STATUS "${MSG_INFO} CMAKE_ARCHIVE_OUTPUT_DIRECTORY = ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}")
|
||||
|
||||
message(STATUS "${MSG_INFO} CMAKE_BINARY_DIR = ${CMAKE_BINARY_DIR}")
|
||||
|
||||
message(STATUS "${MSG_INFO} CMAKE_C_FLAGS = ${CMAKE_C_FLAGS}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_C_FLAGS_DEBUG = ${CMAKE_C_FLAGS_DEBUG}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_C_FLAGS_RELEASE = ${CMAKE_C_FLAGS_RELEASE}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_C_FLAGS_MINSIZEREL = ${CMAKE_C_FLAGS_MINSIZEREL}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_C_FLAGS_RELWITHDEBINFO = ${CMAKE_C_FLAGS_RELWITHDEBINFO}")
|
||||
|
||||
message(STATUS "${MSG_INFO} CMAKE_CXX_FLAGS = ${CMAKE_CXX_FLAGS}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_CXX_FLAGS_DEBUG = ${CMAKE_CXX_FLAGS_DEBUG}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_CXX_FLAGS_RELEASE = ${CMAKE_CXX_FLAGS_RELEASE}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_CXX_FLAGS_MINSIZEREL = ${CMAKE_CXX_FLAGS_MINSIZEREL}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_CXX_FLAGS_RELWITHDEBINFO = ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
|
||||
|
||||
message(STATUS "${MSG_INFO} CMAKE_EXE_LINKER_FLAGS = ${CMAKE_EXE_LINKER_FLAGS}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_EXE_LINKER_FLAGS_DEBUG = ${CMAKE_EXE_LINKER_FLAGS_DEBUG}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_EXE_LINKER_FLAGS_MINSIZEREL = ${CMAKE_EXE_LINKER_FLAGS_MINSIZEREL}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_EXE_LINKER_FLAGS_RELEASE = ${CMAKE_EXE_LINKER_FLAGS_RELEASE}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO = ${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO}")
|
||||
|
||||
message(STATUS "${MSG_INFO} CMAKE_MODULE_LINKER_FLAGS = ${CMAKE_MODULE_LINKER_FLAGS}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_MODULE_LINKER_FLAGS_DEBUG = ${CMAKE_MODULE_LINKER_FLAGS_DEBUG}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL = ${CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_MODULE_LINKER_FLAGS_RELEASE = ${CMAKE_MODULE_LINKER_FLAGS_RELEASE}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO = ${CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO}")
|
||||
|
||||
message(STATUS "${MSG_INFO} CMAKE_SHARED_LINKER_FLAGS = ${CMAKE_SHARED_LINKER_FLAGS}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_SHARED_LINKER_FLAGS_DEBUG = ${CMAKE_SHARED_LINKER_FLAGS_DEBUG}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL = ${CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_SHARED_LINKER_FLAGS_RELEASE = ${CMAKE_SHARED_LINKER_FLAGS_RELEASE}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO = ${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO}")
|
||||
|
||||
message(STATUS "${MSG_INFO} CMAKE_STATIC_LINKER_FLAGS = ${CMAKE_STATIC_LINKER_FLAGS}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_STATIC_LINKER_FLAGS_DEBUG = ${CMAKE_STATIC_LINKER_FLAGS_DEBUG}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL = ${CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_STATIC_LINKER_FLAGS_RELEASE = ${CMAKE_STATIC_LINKER_FLAGS_RELEASE}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO = ${CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO}")
|
||||
|
||||
message(STATUS "${MSG_INFO} CMAKE_C_COMPILER = ${CMAKE_C_COMPILER}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_CXX_COMPILER = ${CMAKE_CXX_COMPILER}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_C_COMPILER_ID = ${CMAKE_C_COMPILER_ID}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_CXX_COMPILER_ID = ${CMAKE_CXX_COMPILER_ID}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_C_COMPILER_VERSION = ${CMAKE_C_COMPILER_VERSION}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_CXX_COMPILER_VERSION = ${CMAKE_CXX_COMPILER_VERSION}")
|
||||
|
||||
message(STATUS "${MSG_INFO} CMAKE_STATIC_LIBRARY_PREFIX = ${CMAKE_STATIC_LIBRARY_PREFIX}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_STATIC_LIBRARY_SUFFIX = ${CMAKE_STATIC_LIBRARY_SUFFIX}")
|
||||
message(STATUS "${MSG_INFO} CMAKE_SHARED_LIBRARY_PREFIX = ${CMAKE_SHARED_LIBRARY_PREFIX}") #链接的共享库的前缀
|
||||
message(STATUS "${MSG_INFO} CMAKE_SHARED_LIBRARY_SUFFIX = ${CMAKE_SHARED_LIBRARY_SUFFIX}") #链接的共享库的后缀
|
||||
message(STATUS "${MSG_INFO} CMAKE_SHARED_MODULE_PREFIX = ${CMAKE_SHARED_MODULE_PREFIX}") #链接的可加载模块的前缀
|
||||
|
||||
|
||||
message(STATUS "${MSG_INFO} ****************system info**************************************")
|
||||
endfunction()
|
||||
|
||||
showOutputInfo()
|
||||
|
||||
message("${MSG_NOTE} configuration finish...")
|
||||
|
||||
|
||||
53
entry/src/main/cpp/napi_init.cpp
Normal file
53
entry/src/main/cpp/napi_init.cpp
Normal file
@ -0,0 +1,53 @@
|
||||
#include "napi/native_api.h"
|
||||
|
||||
static napi_value Add(napi_env env, napi_callback_info info)
|
||||
{
|
||||
size_t argc = 2;
|
||||
napi_value args[2] = {nullptr};
|
||||
|
||||
napi_get_cb_info(env, info, &argc, args , nullptr, nullptr);
|
||||
|
||||
napi_valuetype valuetype0;
|
||||
napi_typeof(env, args[0], &valuetype0);
|
||||
|
||||
napi_valuetype valuetype1;
|
||||
napi_typeof(env, args[1], &valuetype1);
|
||||
|
||||
double value0;
|
||||
napi_get_value_double(env, args[0], &value0);
|
||||
|
||||
double value1;
|
||||
napi_get_value_double(env, args[1], &value1);
|
||||
|
||||
napi_value sum;
|
||||
napi_create_double(env, value0 + value1, &sum);
|
||||
|
||||
return sum;
|
||||
|
||||
}
|
||||
|
||||
EXTERN_C_START
|
||||
static napi_value Init(napi_env env, napi_value exports)
|
||||
{
|
||||
napi_property_descriptor desc[] = {
|
||||
{ "add", nullptr, Add, nullptr, nullptr, nullptr, napi_default, nullptr }
|
||||
};
|
||||
napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
|
||||
return exports;
|
||||
}
|
||||
EXTERN_C_END
|
||||
|
||||
static napi_module demoModule = {
|
||||
.nm_version = 1,
|
||||
.nm_flags = 0,
|
||||
.nm_filename = nullptr,
|
||||
.nm_register_func = Init,
|
||||
.nm_modname = "entry",
|
||||
.nm_priv = ((void*)0),
|
||||
.reserved = { 0 },
|
||||
};
|
||||
|
||||
extern "C" __attribute__((constructor)) void RegisterEntryModule(void)
|
||||
{
|
||||
napi_module_register(&demoModule);
|
||||
}
|
||||
74
entry/src/main/cpp/sdk/CMakeLists.txt
Normal file
74
entry/src/main/cpp/sdk/CMakeLists.txt
Normal file
@ -0,0 +1,74 @@
|
||||
project(${JUDGE_TARGET_NAME})
|
||||
|
||||
set(MSG_NOTE "${MSG_NOTE} [${PROJECT_NAME}]")
|
||||
message("${MSG_NOTE} this project name ${PROJECT_NAME}")
|
||||
|
||||
add_compile_definitions(JUDGE_COMPILE_TARGET_SDK) #编译目标工程定义
|
||||
#add_compile_definitions(JUDGE_SHARED_EXPORT)
|
||||
#add_compile_definitions(JUDGE_SHARED_IMPORT)
|
||||
|
||||
set(JUDGE_INCLUDE_CURRENT
|
||||
${PROJECT_SOURCE_DIR}
|
||||
)
|
||||
|
||||
file(GLOB_RECURSE JUDGE_SOURCE_CURRENT
|
||||
${PROJECT_SOURCE_DIR}/*.h*
|
||||
${PROJECT_SOURCE_DIR}/*.c*
|
||||
)
|
||||
|
||||
set(JUDGE_LIB_DIR_CURRENT
|
||||
|
||||
)
|
||||
|
||||
set(JUDGE_LIB_FILE_CURRENT
|
||||
|
||||
)
|
||||
|
||||
source_group(\\ FILES ${JUDGE_SOURCE_CURRENT})
|
||||
|
||||
include_directories(
|
||||
${JUDGE_INCLUDE}
|
||||
${JUDGE_INCLUDE_PLATFORM}
|
||||
${JUDGE_INCLUDE_CURRENT}
|
||||
)
|
||||
|
||||
link_directories(
|
||||
${JUDGE_LIB_DIR}
|
||||
${JUDGE_LIB_DIR_PLATFORM}
|
||||
${JUDGE_LIB_DIR_CURRENT}
|
||||
)
|
||||
|
||||
if(BUILD_SHARED_LIBS)
|
||||
message("${MSG_NOTE} BUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} build shared dll")
|
||||
add_compile_definitions(JUDGE_SHARED_EXPORT) #cmake version must be greater than 3.12.0
|
||||
else()
|
||||
message("${MSG_NOTE} BUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} build static lib")
|
||||
endif()
|
||||
|
||||
# BUILD_SHARED_LIBS ON的时候生成的是隐式调用的动态库 如果生成显示调用动态库 加上SHARED参数
|
||||
add_library(${JUDGE_TARGET_NAME}
|
||||
${JUDGE_SOURCE}
|
||||
${JUDGE_SOURCE_PLATFORM}
|
||||
${JUDGE_SOURCE_CURRENT}
|
||||
)
|
||||
|
||||
# PUBLIC 在public后面的库会被Link到你的target中,并且里面的符号也会被导出,提供给第三方使用。
|
||||
# PRIVATE 在private后面的库仅被link到你的target中,并且终结掉,第三方不能感知你调了啥库
|
||||
# INTERFACE 在interface后面引入的库不会被链接到你的target中,只会导出符号
|
||||
# 本质上可以使用public 来解决,可以减少坑。
|
||||
target_link_libraries(${JUDGE_TARGET_NAME} PUBLIC
|
||||
${JUDGE_LIB_FILE}
|
||||
${JUDGE_LIB_FILE_PLATFORM}
|
||||
${JUDGE_LIB_FILE_CURRENT}
|
||||
)
|
||||
|
||||
# 设置动态库的版本号
|
||||
#set(CMAKE_SHARED_LIBRARY_SONAME_VERSION 1)
|
||||
|
||||
#CMAKE_STATIC_LIBRARY_SUFFIX STREQUAL "lib" OR
|
||||
if(CMAKE_SHARED_LIBRARY_PREFIX STREQUAL lib)
|
||||
set_target_properties(${JUDGE_TARGET_NAME} PROPERTIES OUTPUT_NAME ${JUDGE_TARGET_NAME}) #VERSION 1.0.0 SOVERSION 1.0
|
||||
else()
|
||||
set_target_properties(${JUDGE_TARGET_NAME} PROPERTIES OUTPUT_NAME lib${JUDGE_TARGET_NAME}) #VERSION 1.0.0 SOVERSION 1.0
|
||||
endif()
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user