# We can't build glog with gflags, unless gflags is pre-installed. # If build glog with pre-installed gflags, there will be conflict. set(OPENFST_ROOT ${LIB_BASE_DIR}/openfst-build) # We can't build glog with gflags, unless gflags is pre-installed. # If build glog with pre-installed gflags, there will be conflict. include(gflags) if(TARGET gflags) message(STATUS "${BoldGreen}Find Package gflags: ${gflags_FOUND}${ColourReset}") set_target_properties(gflags PROPERTIES INTERFACE_COMPILE_OPTIONS "-fPIC") endif() set(WITH_GFLAGS OFF CACHE BOOL "whether build glog with gflags" FORCE) include(glog) # 推荐手动构建这个openfst依赖,因为通过cmake构建这个库会失败。 function(GRPC_INSTALL) # 推荐手动去构建项目,不然这些代码因为环境不兼容等原因会执行不成功 message(STATUS "${BoldGreen}Install openfst: ${GLOG_BUILD_DIR}${ColourReset}") if(NOT EXISTS ${OPENFST_ROOT}) execute_process(COMMAND mkdir -p "${OPENFST_ROOT}") else () execute_process(COMMAND rm -rf "${OPENFST_ROOT}/*") endif () # patch补丁必须打,不然会报glog无法动态识别这个库的方法,导致链接不成功。 execute_process( COMMAND cmake -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/patch/openfst ${LIB_BASE_DIR}/openfst-src WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) message(STATUS "${BoldGreen}configure openfst${ColourReset}") #./configure --prefix=${openfst_SOURCE_DIR}/build --enable-static --disable-shared --with-pic execute_process( COMMAND ./configure --prefix=${OPENFST_ROOT} --with-pic WORKING_DIRECTORY ${LIB_BASE_DIR}/openfst-src ) message(STATUS "${BoldGreen}copy openfst patch done!${ColourReset}") execute_process( COMMAND make -j4 WORKING_DIRECTORY ${LIB_BASE_DIR}/openfst-src RESULT_VARIABLE configure_result ) if(configure_result) message(FATAL_ERROR "${BoldRed}openfst项目构建不成功! ${ColourReset}") endif () execute_process( COMMAND make --install WORKING_DIRECTORY ${LIB_BASE_DIR}/openfst-src) endfunction() if(LIB_BASE_DIR) # 下面这堆关键字是防止cmake出一堆无关的提示 if(NOT GRAPH_TOOLS) set(HAVE_BIN OFF CACHE BOOL "Build the fst binaries" FORCE) set(HAVE_SCRIPT OFF CACHE BOOL "Build the fstscript" FORCE) endif() set(HAVE_COMPACT OFF CACHE BOOL "Build compact" FORCE) set(HAVE_CONST OFF CACHE BOOL "Build const" FORCE) set(HAVE_GRM OFF CACHE BOOL "Build grm" FORCE) set(HAVE_FAR OFF CACHE BOOL "Build far" FORCE) set(HAVE_PDT OFF CACHE BOOL "Build pdt" FORCE) set(HAVE_MPDT OFF CACHE BOOL "Build mpdt" FORCE) set(HAVE_LINEAR OFF CACHE BOOL "Build linear" FORCE) set(HAVE_LOOKAHEAD OFF CACHE BOOL "Build lookahead" FORCE) set(HAVE_NGRAM OFF CACHE BOOL "Build ngram" FORCE) set(HAVE_SPECIAL OFF CACHE BOOL "Build special" FORCE) else () message(FATAL_ERROR "${BoldRed}LIB_BASE_DIR for openfst is not set! ${ColourReset}") endif () find_path(OPENFST_INCLUDE_DIR fst/fst.h PATHS ${OPENFST_ROOT}/include) find_path(OPENFST_BINARY_DIR fstsymbols PATHS ${OPENFST_ROOT}/bin) find_path(OPENFST_LIBRARY_DIR libfst.a PATHS ${OPENFST_ROOT}/lib) find_library(fst NAMES fst PATHS ${OPENFST_ROOT}/lib) set(OPENFST_LIBRARYS fst ${GFLAGS_LIBRARY_NOTHREADS} ${GLOG_LIBRARY} dl) #验证库和文件是否被找到 include(${CMAKE_ROOT}/Modules/FindPackageHandleStandardArgs.cmake) FIND_PACKAGE_HANDLE_STANDARD_ARGS(Openfst DEFAULT_MSG OPENFST_INCLUDE_DIR OPENFST_BINARY_DIR fst GFLAGS_LIBRARY_NOTHREADS GFLAGS_LIBRARY GLOG_LIBRARY OPENFST_LIBRARY_DIR) message("${BoldGreen} OPENFST_INCLUDE_DIR: ${OPENFST_INCLUDE_DIR} OPENFST_BINARY_DIR: ${OPENFST_BINARY_DIR} OPENFST_LIBRARY_DIR: ${OPENFST_LIBRARY_DIR} IMPORTED OPENFST_LIBRARYS: ${OPENFST_LIBRARYS}${ColourReset}") if(third_party_libraries) list(APPEND third_party_libraries $(OPENFST_LIBRARYS) ) endif ()