function (IsZWCAD out) if (DEFINED CACHE{ZWCAD}) set(${out} TRUE PARENT_SCOPE) else() set(${out} FALSE PARENT_SCOPE) endif() endfunction() function(apply_arx_definitions TARGET_NAME) if(MSVC) target_compile_definitions(${TARGET_NAME} PRIVATE _ALLOW_RTCc_IN_STL _WIN32_IE=0x0600 WIN WIN32 _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1 _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT=1 _AFXDLL UNICODE _UNICODE ) endif() endfunction() function(apply_arx_optimization TARGET_NAME) if(MSVC) target_compile_options(${TARGET_NAME} PRIVATE $<$:/Od> $<$:/Zi> $<$:/Ob0> ) target_compile_options(${TARGET_NAME} PRIVATE $<$:/O2> $<$:/Ob2> $<$:/Oi> $<$:/Ot> $<$:/Oy> $<$:/GT> ) target_compile_definitions(${TARGET_NAME} PRIVATE $<$:_NDEBUG=1> $<$:NDEBUG=1> ) if (DEFINED(WholeProgramOptimization)) target_compile_options(${TARGET_NAME} PRIVATE $<$:/GL> ) target_link_options(${TARGET_NAME} PRIVATE $<$:/LTCG> ) endif() endif() endfunction() function (simple_link_cad_sdk TARGET_NAME) IsZWCAD(isZW) if (isZW) target_link_libraries(${TARGET_NAME} PRIVATE ThirdParty::ZRX) else() target_link_libraries(${TARGET_NAME} PRIVATE ThirdParty::ARX) endif() apply_arx_optimization(${TARGET_NAME}) apply_arx_definitions(${TARGET_NAME}) endfunction() function (get_sdk_version out) IsZWCAD(isZW) set(VER ${CAD_SDK_VERSION}) if (isZW) string(REGEX MATCH "..$" VER "${CAD_SDK_VERSION}") endif() set(${out} ${VER} PARENT_SCOPE) endfunction() function (add_def_file_name _SOURCES _BASE_NAME) set (tmp "${${_SOURCES}}") IsZWCAD(isZW) if (isZW) list(APPEND tmp "${_BASE_NAME}_zrx.def") else() list(APPEND tmp "${_BASE_NAME}.def") endif() set(${_SOURCES} "${tmp}" PARENT_SCOPE) endfunction() function(get_encryption_modes _modes) set (tmp "${${_modes}}") list(APPEND tmp "BAL_REMOTE" "TRIAL_YEAR") set(${_modes} "${tmp}" PARENT_SCOPE) endfunction() function(set_encryption_definitions_and_output_path TARGET_NAME MODE) if (MODE STREQUAL "TRIAL_YEAR") target_compile_definitions(${TARGET_NAME} PRIVATE BAL_REMOTE $<$:TRIAL_YEAR=${TRIAL_YEAR}> $<$:WF2023> $<$:${PRODUCT}> ) else() target_compile_definitions(${TARGET_NAME} PRIVATE $<$:WF2023> $<$:BAL_REMOTE> $<$:${PRODUCT}> $<$:${MODE}> ) endif() set_target_properties(${TARGET_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_DEBUG "${GLOBAL_BIN_DIR}/Debug-x64-${GENERATE_DIR_TAG}/WF2023-BAL_REMOTE") set_target_properties(${TARGET_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_RELEASE "${GLOBAL_BIN_DIR}/Release-x64-${GENERATE_DIR_TAG}/${PRODUCT}-${MODE}") set_target_properties(${TARGET_NAME} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${GLOBAL_LIB_DIR}/Debug-x64-${GENERATE_DIR_TAG}/WF2023-BAL_REMOTE" ) set_target_properties(${TARGET_NAME} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${GLOBAL_LIB_DIR}/Release-x64-${GENERATE_DIR_TAG}/${PRODUCT}-${MODE}" ) target_link_libraries(${TARGET_NAME} PRIVATE ThirdParty::BitAnswer) endfunction() function(target_link_objectarx TARGET_NAME _EXTENSION ) if (ARGC LESS 2) message(FATAL_ERROR "target_link_objectarx() 函数至少需要两个参数: TARGET_NAME 和 _EXTENSION") endif() target_link_libraries(${TARGET_NAME} PRIVATE ShsGlobalIncludes) target_include_directories(${TARGET_NAME} PRIVATE "${DEP_INC_ROOT}") simple_link_cad_sdk(${TARGET_NAME}) target_link_libraries(${TARGET_NAME} PRIVATE "rpcrt4.lib") target_compile_definitions(${TARGET_NAME} PRIVATE CMAKE ARX=${SDK_VERSION} ${_EXTENSION} ) endfunction() function(target_set_name_and_suffix target_name new_name new_suffix) if(NOT TARGET ${target_name}) message(FATAL_ERROR "[ObjectARX-CMake] Target '${target_name}' 不存在!") endif() if(NOT "${new_name}" STREQUAL "") set_target_properties(${target_name} PROPERTIES OUTPUT_NAME "${new_name}") endif() if(NOT "${new_suffix}" STREQUAL "") get_target_property(target_type ${target_name} TYPE) if ("${new_suffix}" STREQUAL ".arx" AND IS_ZWCAD) set(new_suffix ".zrx") endif() set_target_properties(${target_name} PROPERTIES SUFFIX "${new_suffix}") if(target_type MATCHES "^(SHARED_LIBRARY|MODULE_LIBRARY|EXECUTABLE)$") set_target_properties(${target_name} PROPERTIES IMPORT_SUFFIX ".lib" IMPORT_PREFIX "" ) endif() endif() endfunction() function(set_debug_post_build target_name arx_name ext ) set(CONFIG_JSON "sh_output_path.json") if (IS_ZWCAD) set(CONFIG_JSON "zw_output_path.json") endif() add_custom_command( TARGET ${target_name} POST_BUILD COMMAND "$<$:${CMAKE_SOURCE_DIR}/copyarx.exe>" "$<$:CMAKE>" "$<$:$>" "$<$:${GENERATE_DIR_TAG}>" "$<$:${CMAKE_SOURCE_DIR}/${CONFIG_JSON}>" COMMENT "正在调用 copyarx.exe 部署 ARX 模块..." VERBATIM ) endfunction() function(add_custom_module_2 dir_path target_name folder_path) add_subdirectory(${dir_path}) set_target_properties(${target_name} PROPERTIES FOLDER "${folder_path}" ) endfunction() function(add_custom_module dir_path folder_path) get_filename_component(target_name "${dir_path}" NAME) add_custom_module_2(${dir_path} ${target_name} ${folder_path}) endfunction()