问题描述
我有一个使用gettext的CMake项目,并且已经通过vcpkg在我的计算机上安装了gettext。运行vcpkg install 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 \ unofficial-gettext \ unofficial-gettext-config.cmake存在。
我已将其添加到我的CMakeSettings_schema.json中,但这没有什么区别: “ cmakeCommandArgs”:“ -DCMAKE_TOOLCHAIN_FILE = C:/vcpkg/scripts/buildsystems/vcpkg.cmake”,
我以前从未见过这种unofficial::gettext::libintl
语法,但是由于该失败已经在find_package命令中发生,因此我认为目前不相关。我这是怎么了?
解决方法
当前,vcpkg使用vcpkg拥有的CMakeLists.txt来构建gettext的一部分(仅libintl)。由于它是vcpkg拥有的cmake构建脚本,因此vcpkg可以自由导出目标unofficial::gettext::libintl
中的一个,以正确链接到其他vcpkg拥有的cmake构建中的libintl。
将来,那些unofficial
命名空间目标将被删除,因为构建将更改为端口的本地构建(meson / autotools / make)[对于gettext,将在PR https://github.com中完成/ microsoft / vcpkg / pull / 11776]。因此,您不应依赖它们中的任何一个,因为它将把您的内置文件锁定到vcpkg。
对于libintl,CMake具有FindIntl.cmake
,应改为使用。如果find_packe(Intl)
工作不正常,请在vcpkg中打开一个问题