如何将ICU库添加到项目中?

7

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

这是CMakeLists.txt文件:

cmake_minimum_required(VERSION 2.8)

project(test1)

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

find_package(Boost 1.54.0 COMPONENTS filesystem system regex 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.

我该怎么做?请帮忙。

4个回答

8
使用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语句中特别列出组件,否则这是无法工作的。你太棒了! - MikeMB

4

如果需要使用 ICU 库,请使用:

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

如果是可选的,请使用:

可选:

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

请在 add_executable 命令之后插入这些行!

其中,components... 是 ICU 库组件的列表,可以在此处找到。


3

自3.7.0版本开始,CMake附带打包的FindICU.cmake,但它与julp的版本不同(即不兼容)。 - DevSolar
1
@DevSolar,在我安装了Homebrew icu4c的MacBook上,它无法工作。 - linrongbin
1
@linrongbin 这个评论不是调试问题的地方;也许可以提出一个单独的问题来问? - DevSolar

0

这一切都关乎于包含头文件和链接库。对于小型项目,您可能只需要执行以下操作(假设您已经正确安装了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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接