在Windows上使用gettext创建CMake项目

在Windows上使用gettext创建CMake项目,windows,visual-studio,cmake,gettext,vcpkg,Windows,Visual Studio,Cmake,Gettext,Vcpkg,我有一个使用gettext的CMake项目,并通过vcpkg在我的机器上安装了gettext。运行vcpkg安装gettext:x64 windows时,我收到以下消息: The package gettext:x86-windows provides CMake targets: find_package(unofficial-gettext CONFIG REQUIRED) target_link_libraries(main PRIVATE unofficial::get

我有一个使用gettext的CMake项目,并通过vcpkg在我的机器上安装了gettext。运行vcpkg安装gettext:x64 windows时,我收到以下消息:

The package gettext:x86-windows provides CMake targets:

    find_package(unofficial-gettext CONFIG REQUIRED)
    target_link_libraries(main PRIVATE unofficial::gettext::libintl)
我将其添加到我的CMakeLists.txt文件中,当Visual Studio 2017尝试从中生成CMake缓存时,它会说:

1> C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO\2017\COMMUNITY\COMMON7\IDE\COMMONEXTENSIONS\MICROSOFT\CMAKE\CMake\bin\cmake.exe  -G "Ninja" -DCMAKE_INSTALL_PREFIX:PATH="C:\Users\Enno\CMakeBuilds\1f25c7de-1ae7-7131-9c5a-889a4e831935\install\x64-Debug"  -DCMAKE_CXX_COMPILER="C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.16.27023/bin/HostX64/x64/cl.exe"  -DCMAKE_C_COMPILER="C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.16.27023/bin/HostX64/x64/cl.exe" -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake -DCMAKE_BUILD_TYPE="Debug" -DCMAKE_MAKE_PROGRAM="C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO\2017\COMMUNITY\COMMON7\IDE\COMMONEXTENSIONS\MICROSOFT\CMAKE\Ninja\ninja.exe" "C:\Users\Enno\source\repos\echeck" returned with exit code: 1
CMake Error at CMakeLists.txt:8 (find_package):
  Could not find a package configuration file provided by
  "unofficial-gettext" with any of the following names:
    unofficial-gettextConfig.cmake
    unofficial-gettext-config.cmake
  Add the installation prefix of "unofficial-gettext" to CMAKE_PREFIX_PATH or
  set "unofficial-gettext_DIR" to a directory containing one of the above
  files.  If "unofficial-gettext" provides a separate development package or
  SDK, be sure it has been installed.
但该文件的存在形式为C:\vcpkg\installed\x64 windows\share\nonofficial gettext\nonofficial-gettext-config.cmake

我已将此添加到我的CMakeSettings_schema.json中,但没有任何区别: “cmakeCommandArgs”:“-DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake”


我以前从未见过
非官方::gettext::libintl
语法,但由于find_package命令中已经出现了故障,因此我认为这与现在无关。我的错误是什么?

目前,vcpkg使用vcpkg拥有的CMakeLists.txt来构建gettext的部分内容(仅libintl)。由于它是vcpkg拥有的cmake构建脚本,vcpkg可以自由导出目标,其中一个目标是
非官方的::gettext::libintl
,以正确链接其他vcpkg拥有的cmake构建中的libintl。
将来,这些
非官方的
命名空间目标将被删除,因为构建将更改为端口的本机构建(介子/自动工具/生成)[对于gettext,这将在PR中完成https://github.com/microsoft/vcpkg/pull/11776]. 因此,您不应该依赖任何一个选项,因为它将锁定您的内置vcpkg。

对于libintl,CMake有一个
FindIntl.CMake
,应该改用它。如果
find_packe(Intl)
工作不正常,请在vcpkg中打开一个问题
non-official::gettext::libintl
只意味着
libintl
non-official::gettext::
命名空间的一部分。在其他一些lib中也可以找到类似的名称,例如
Qt5::Widgets
boost::unit\u test\u framework
。但这对你来说不会有任何改变。不确定您的工具链文件是否应该包含此信息,但添加前缀路径是否会改变任何东西:
-D'CMAKE\u prefix\u path=C:\vcpkg\installed\x64 windows'
?这会使查找程序包错误消失,但现在我看到的是:1>——构建文件已写入:C:/Users/Enno/source/repos/echeck 1>启动CMake目标信息提取。。。1> 已建立CMake服务器连接。1> 目标信息提取完成。1> 配置失败。谢谢,这是非常有用的!我意识到FindIntl不起作用,所以当vcpkg建议使用不同的包名(非官方的gettext)时,我尝试了这个方法,这就是我发布这个问题的原因。今天晚些时候,我将提出一个关于vcpkg的问题,在此之前,不要为Windows用户提供i18n支持。i18n是
FindICU.cmake
,vcpkg附带的FindIntl.cmake似乎找不到正确的库名
find_库(Intl_库“Intl”DOC“libintl库(如果不在C库中)”)
找不到库,因为它被称为
libintl
。我可以通过在
find\u包(Intl)
命令之前添加
find\u库(Intl\u库名称libintl Intl)
来解决这个问题。我打开了一个问题:-谢谢你的帮助!