【问题标题】:How to add ICU library to project?如何将 ICU 库添加到项目中?
【发布时间】:2016-11-04 21:31:15
【问题描述】:

请帮帮我。我想将 ICU 库添加到我的项目中。我的 cmake 版本是 2.8.12.2。

有 CMakeLists.txt

cmake_minimum_required(2.8 版)

项目(测试1)

设置(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR})
设置(CMAKE_CXX_COMPILER /usr/bin/g++)
设置(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_GLIBCXX_USE_CXX11_ABI=0 -std=c++11 -Wall")

find_package(Boost 1.54.0 COMPONENTS 文件系统系统正则表达式 unit_test_framework REQUIRED)
find_package(ICU 52.0 REQUIRED )

include_directories(${Boost_INCLUDE_DIR})
link_directories(${Boost_LIBRARY_DIR})

add_executable(test1 src/dictionary.cpp src/main.cpp )
target_link_libraries( test1 ${Boost_LIBRARIES} pthread )

我已经安装了 ICU 库:libicu-dev、libicu-dev:i386、libicu52、libicu52:i386、libicu52-dbg:i386

但是一旦我运行 CMake,我就会收到以下错误消息:

CMake Error at CMakeLists.txt:10 (find_package):
  By not providing "FindICU.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "ICU", but
  CMake did not find one.

  Could not find a package configuration file provided by "ICU" (requested
  version 52.1) with any of the following names:

    ICUConfig.cmake
    icu-config.cmake

  Add the installation prefix of "ICU" to CMAKE_PREFIX_PATH or set "ICU_DIR"
  to a directory containing one of the above files.  If "ICU" provides a
  separate development package or SDK, be sure it has been installed.

我该怎么办?请帮帮我。

【问题讨论】:

    标签: cmake icu


    【解决方案1】:

    通过在http://github.com/julp/FindICU.cmake的项目目录顶部添加文件 FindICU.cmake 解决了这个问题

    【讨论】:

    • 自 3.7.0 版起,CMake comes with a packaged FindICU.cmake,但与 julp 的工作方式不同(即不兼容)。
    • @DevSolar,在我的装有自制软件的 icu4c 的 macbook 上,它不工作。
    • @linrongbin 这个评论几乎不是调试问题的地方;也许问一个单独的问题?
    【解决方案2】:

    这就是包含标题和链接库的全部内容。对于小型项目,您可能只是这样做,(假设您已经正确安装了 ICU,并且可以手动运行)

    include_directories(${ICU_INCLUDE_DIRS})
    link_directories(${ICU_LIBRARY_DIRS})
    add_executable(test1 src/dictionary.cpp src/main.cpp ) 
    target_link_libraries(test1 ${ICU_LIBRARIES})
    

    您可以在运行“cmake”时使用下方打印信息以检查 cmake 是否找到正确的路径。

    MESSAGE("ICU_INCLUDE_DIRS: " ${ICU_INCLUDE_DIRS})
    

    我使用的cmake版本是3.5.2

    【讨论】:

      【解决方案3】:

      使用 CMake 3.13。

      add_executable(myapp
          main.cpp
      )
      
      # ICU Components Reference:
      # https://cmake.org/cmake/help/latest/module/FindICU.html
      # ICU components = data, i18n, io, le, lx, test, tu and uc.
      
      find_package(ICU 61.0 COMPONENTS uc i18n REQUIRED)
      
      # Link using the imported target names (ICU::uc, ICU::i18n, etc.)
      
      target_link_libraries(myapp ICU::uc ICU::i18n)
      

      注意:除非我在 find_package 语句中特别列出了组件,否则这将不起作用。

      【讨论】:

      • "注意:除非我在 find_package 语句中特别列出了组件,否则这是行不通的。"先生,您是救生员!
      【解决方案4】:

      如果 ICU 库是必需的,请使用:

      find_package(ICU REQUIRED components...)
      target_link_libraries(lab1 ${ICU_LIBRARIES})
      

      如果是可选,请使用:

      find_package(ICU COMPONENTS components...)
      target_link_libraries(lab1 ${ICU_LIBRARIES})
      

      components... 是 ICU 库组件列表,可以在 here 找到。
      插入这些行仅限之后 add_executable 命令!

      【讨论】:

        猜你喜欢
        • 2018-12-21
        • 1970-01-01
        • 2012-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多