Я пытаюсь скомпилировать программу, написанную на C++, с помощью CMake.
Содержимое файла CMakeLists.txt, в который входит код:
cmake_minimum_required(VERSION 3.21)
project(<redacted> C CXX)
set(CMAKE_CXX_STANDARD 23)
add_executable(<redacted> src/main.cpp
src/<redacted>.h
src/<redacted>.h src/<redacted>.cpp
src/<redacted>.h
src/<redacted>.h src/<redacted>.cpp
src/<redacted>.h src/<redacted>.cpp
src/<redacted>.h
src/<redacted>.h src/<redacted>.c
src/<redacted>.h)
find_package(PkgConfig REQUIRED)
pkg_search_module(GLIB REQUIRED glib-2.0)
include_directories(${GLIB_INCLUDE_DIRS})
link_directories(${GLIB_LIBRARY_DIRS})
target_link_libraries(<redacted> ${GLIB_LIBRARIES} gcrypt)
Когда я запускаю команду: cmake . -G "MinGW Makefiles" && make
в w64devkit (или в Visual Studio, или VSCode), я получаю следующую ошибку:
-- Found PkgConfig: C:/Users/Jonathon/Downloads/pkg-config-lite-0.28-1_bin-win32/pkg-config-lite-0.28-1/bin/pkg-config.exe (found version "0.28")
-- Checking for module 'glib-2.0'
-- No package 'glib-2.0' found
CMake Error at C:/Program Files/CMake/share/cmake-3.29/Modules/FindPkgConfig.cmake:634 (message):
The following required packages were not found:
- glib-2.0
Call Stack (most recent call first):
C:/Program Files/CMake/share/cmake-3.29/Modules/FindPkgConfig.cmake:862 (_pkg_check_modules_internal)
CMakeLists.txt:28 (PKG_CHECK_MODULES)
-- Configuring incomplete, errors occurred!
Похожий пост есть здесь, но это было на Linux, а я на Windows. Кроме того, было найдено решение: удалить строку из CMakeLists.txt, но этой строки нет в моем файле CMakeLists.txt.
Любая помощь будет высоко оценен. Спасибо
[Обновлять]
Я попытался установить glib с помощью conan, используя его как conanfile.txt:
[requires]
glib/2.78.3
[generators]
CMakeDeps
CMakeToolchain
Затем, когда я набираю команду conan install . --output-folder=build && cd build && cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake && cmake --build
(как предложено здесь, потому что я получал сообщение «ОШИБКА: Conanfile не найден», когда я только что использовал conan install . --output-folder=build && cmake --build
), я получаю следующий результат:
======== Input profiles ========
Profile host:
[settings]
arch=x86_64
build_type=Release
compiler=msvc
compiler.cppstd=14
compiler.runtime=dynamic
compiler.runtime_type=Release
compiler.version=193
os=Windows
Profile build:
[settings]
arch=x86_64
build_type=Release
compiler=msvc
compiler.cppstd=14
compiler.runtime=dynamic
compiler.runtime_type=Release
compiler.version=193
os=Windows
======== Computing dependency graph ========
Graph root
conanfile.txt: C:\Users\Jonathon\source\tlsdump-main\tlsdump-main\conanfile.txt
Requirements
bzip2/1.0.8#457c272f7da34cb9c67456dd217d36c4 - Cache
glib/2.78.3#0cd1865c8603d90b3bc5858065e16d01 - Cache
libffi/3.4.4#35eb63842b505824b70aedc1baefc916 - Cache
libgettext/0.22#2c87563d7a69544dd9379f038aca3b0b - Cache
libiconv/1.17#73fefc1b696e069df90fd1d18aa63edd - Cache
pcre2/10.42#a7a2c122056510509a7525c83d6a6695 - Cache
zlib/1.3.1#f52e03ae3d251dec704634230cd806a2 - Cache
Build requirements
autoconf/2.71#f9307992909d7fb3df459340f1932809 - Cache
automake/1.16.5#058bda3e21c36c9aa8425daf3c1faf50 - Cache
m4/1.4.19#b38ced39a01e31fef5435bc634461fd2 - Cache
meson/1.2.2#04bdfb85d665c82b08a3510aee3ffd19 - Cache
msys2/cci.latest#5a31efa2bde593541fd5ac3bcc50c01c - Cache
ninja/1.11.1#77587f8c8318662ac8e5a7867eb4be21 - Cache
pkgconf/2.0.3#f996677e96e61e6552d85e83756c328b - Cache
Resolved version ranges
zlib/[>=1.2.11 <2]: zlib/1.3.1
======== Computing necessary packages ========
Requirements
bzip2/1.0.8#457c272f7da34cb9c67456dd217d36c4:67bfcb7b4b78262b9d05495e479dcd92f747316b#cea9c0f0dfa41e83aebd5d39c5a5cbf3 - Cache
glib/2.78.3#0cd1865c8603d90b3bc5858065e16d01:750e9c8cf560085c96c0fa42531c45c18af8be50#29d02404508c39a0803c3bee40426924 - Cache
libffi/3.4.4#35eb63842b505824b70aedc1baefc916:7bfde258ff4f62f75668d0896dbddedaa7480a0f#37e6c892e9418389fcf21227e9c1ae6b - Cache
libgettext/0.22#2c87563d7a69544dd9379f038aca3b0b:55052839d1d508208c0cd4c7594a7001c70287d1#bea6a5629dc31a80b4d489e5ef163ec4 - Cache
libiconv/1.17#73fefc1b696e069df90fd1d18aa63edd:7bfde258ff4f62f75668d0896dbddedaa7480a0f#9ef92719f5c05dca2f0dbb46f50d3f8d - Cache
pcre2/10.42#a7a2c122056510509a7525c83d6a6695:1bbffc30d8479a890917ef6674ab5e5f3c5b2036#d6a7c0162d1450645a9d56832ca25ae6 - Cache
zlib/1.3.1#f52e03ae3d251dec704634230cd806a2:7bfde258ff4f62f75668d0896dbddedaa7480a0f#20d10b761ec15eed7a1d61c86bc7415a - Cache
Build requirements
Skipped binaries
autoconf/2.71, automake/1.16.5, m4/1.4.19, meson/1.2.2, msys2/cci.latest, ninja/1.11.1, pkgconf/2.0.3
======== Installing packages ========
bzip2/1.0.8: Already installed! (1 of 7)
zlib/1.3.1: Already installed! (2 of 7)
libiconv/1.17: Already installed! (3 of 7)
libffi/3.4.4: Already installed! (4 of 7)
pcre2/10.42: Already installed! (5 of 7)
pcre2/10.42: Appending PATH environment variable: C:\Users\Jonathon\.conan2\p\pcre2e09694aa47719\p\bin
libgettext/0.22: Already installed! (6 of 7)
glib/2.78.3: Already installed! (7 of 7)
WARN: deprecated: Usage of deprecated Conan 1.X features that will be removed in Conan 2.X:
WARN: deprecated: 'cpp_info.names' used in: zlib/1.3.1, bzip2/1.0.8, pcre2/10.42, libiconv/1.17, libgettext/0.22
WARN: deprecated: 'cpp_info.build_modules' used in: bzip2/1.0.8
WARN: deprecated: 'env_info' used in: pcre2/10.42, libiconv/1.17, bzip2/1.0.8, glib/2.78.3
======== Finalizing install (deploy, generators) ========
conanfile.txt: Writing generators to C:\Users\Jonathon\source\tlsdump-main\tlsdump-main\build
conanfile.txt: Generator 'CMakeDeps' calling 'generate()'
conanfile.txt: CMakeDeps necessary find_package() and targets for your CMakeLists.txt
find_package(glib)
target_link_libraries(... glib::glib)
conanfile.txt: Generator 'CMakeToolchain' calling 'generate()'
conanfile.txt: CMakeToolchain generated: conan_toolchain.cmake
conanfile.txt: Preset 'conan-default' added to CMakePresets.json. Invoke it manually using 'cmake --preset conan-default' if using CMake>=3.23
conanfile.txt: If your CMake version is not compatible with CMakePresets (<3.23) call cmake like: 'cmake <path> -G "Visual Studio 17 2022" -DCMAKE_TOOLCHAIN_FILE=C:\Users\Jonathon\source\tlsdump-main\tlsdump-main\build\conan_toolchain.cmake -DCMAKE_POLICY_DEFAULT_CMP0091=NEW'
conanfile.txt: CMakeToolchain generated: CMakePresets.json
conanfile.txt: CMakeToolchain generated: ..\CMakeUserPresets.json
conanfile.txt: Generating aggregated env files
conanfile.txt: Generated aggregated env files: ['conanbuild.bat', 'conanrun.bat']
Install finished successfully
-- Selecting Windows SDK version 10.0.22621.0 to target Windows 10.0.19045.
-- Checking for one of the modules 'glib-2.0'
CMake Error at C:/Program Files/CMake/share/cmake-3.29/Modules/FindPkgConfig.cmake:927 (message):
None of the required 'glib-2.0' found
Call Stack (most recent call first):
CMakeLists.txt:20 (pkg_search_module)
-- Configuring incomplete, errors occurred!
Теперь установлена версия glib 2.78.3, потому что это последняя версия, доступная на conan. Самая ранняя версия, доступная на conan, — 2.65.0, поэтому, когда я попытался изменить conanfile, чтобы попытаться получить версию 2.0.0, это не сработало. Кроме того, версия 2.0.0 датирована 2002 годом, и я очень сомневаюсь, что проект, который я пытаюсь скомпилировать, использовал ее, потому что она была сделана в прошлом году.
Когда я вернулся к файлу CMakeLists.txt и изменил эту строку:
pkg_search_module(GLIB REQUIRED glib-2.0)
на pkg_search_module(GLIB REQUIRED glib-2.78.3)
, затем снова запустил команду conan install . --output-folder=build && cd build && cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake && cmake --build
, я получаю такой вывод:
======== Input profiles ========
Profile host:
[settings]
arch=x86_64
build_type=Release
compiler=msvc
compiler.cppstd=14
compiler.runtime=dynamic
compiler.runtime_type=Release
compiler.version=193
os=Windows
Profile build:
[settings]
arch=x86_64
build_type=Release
compiler=msvc
compiler.cppstd=14
compiler.runtime=dynamic
compiler.runtime_type=Release
compiler.version=193
os=Windows
======== Computing dependency graph ========
Graph root
conanfile.txt: C:\Users\Jonathon\source\tlsdump-main\tlsdump-main\conanfile.txt
Requirements
bzip2/1.0.8#457c272f7da34cb9c67456dd217d36c4 - Cache
glib/2.78.3#0cd1865c8603d90b3bc5858065e16d01 - Cache
libffi/3.4.4#35eb63842b505824b70aedc1baefc916 - Cache
libgettext/0.22#2c87563d7a69544dd9379f038aca3b0b - Cache
libiconv/1.17#73fefc1b696e069df90fd1d18aa63edd - Cache
pcre2/10.42#a7a2c122056510509a7525c83d6a6695 - Cache
zlib/1.3.1#f52e03ae3d251dec704634230cd806a2 - Cache
Build requirements
autoconf/2.71#f9307992909d7fb3df459340f1932809 - Cache
automake/1.16.5#058bda3e21c36c9aa8425daf3c1faf50 - Cache
m4/1.4.19#b38ced39a01e31fef5435bc634461fd2 - Cache
meson/1.2.2#04bdfb85d665c82b08a3510aee3ffd19 - Cache
msys2/cci.latest#5a31efa2bde593541fd5ac3bcc50c01c - Cache
ninja/1.11.1#77587f8c8318662ac8e5a7867eb4be21 - Cache
pkgconf/2.0.3#f996677e96e61e6552d85e83756c328b - Cache
Resolved version ranges
zlib/[>=1.2.11 <2]: zlib/1.3.1
======== Computing necessary packages ========
Requirements
bzip2/1.0.8#457c272f7da34cb9c67456dd217d36c4:67bfcb7b4b78262b9d05495e479dcd92f747316b#cea9c0f0dfa41e83aebd5d39c5a5cbf3 - Cache
glib/2.78.3#0cd1865c8603d90b3bc5858065e16d01:750e9c8cf560085c96c0fa42531c45c18af8be50#29d02404508c39a0803c3bee40426924 - Cache
libffi/3.4.4#35eb63842b505824b70aedc1baefc916:7bfde258ff4f62f75668d0896dbddedaa7480a0f#37e6c892e9418389fcf21227e9c1ae6b - Cache
libgettext/0.22#2c87563d7a69544dd9379f038aca3b0b:55052839d1d508208c0cd4c7594a7001c70287d1#bea6a5629dc31a80b4d489e5ef163ec4 - Cache
libiconv/1.17#73fefc1b696e069df90fd1d18aa63edd:7bfde258ff4f62f75668d0896dbddedaa7480a0f#9ef92719f5c05dca2f0dbb46f50d3f8d - Cache
pcre2/10.42#a7a2c122056510509a7525c83d6a6695:1bbffc30d8479a890917ef6674ab5e5f3c5b2036#d6a7c0162d1450645a9d56832ca25ae6 - Cache
zlib/1.3.1#f52e03ae3d251dec704634230cd806a2:7bfde258ff4f62f75668d0896dbddedaa7480a0f#20d10b761ec15eed7a1d61c86bc7415a - Cache
Build requirements
Skipped binaries
autoconf/2.71, automake/1.16.5, m4/1.4.19, meson/1.2.2, msys2/cci.latest, ninja/1.11.1, pkgconf/2.0.3
======== Installing packages ========
bzip2/1.0.8: Already installed! (1 of 7)
zlib/1.3.1: Already installed! (2 of 7)
libiconv/1.17: Already installed! (3 of 7)
libffi/3.4.4: Already installed! (4 of 7)
pcre2/10.42: Already installed! (5 of 7)
pcre2/10.42: Appending PATH environment variable: C:\Users\Jonathon\.conan2\p\pcre2e09694aa47719\p\bin
libgettext/0.22: Already installed! (6 of 7)
glib/2.78.3: Already installed! (7 of 7)
WARN: deprecated: Usage of deprecated Conan 1.X features that will be removed in Conan 2.X:
WARN: deprecated: 'cpp_info.names' used in: bzip2/1.0.8, libiconv/1.17, libgettext/0.22, zlib/1.3.1, pcre2/10.42
WARN: deprecated: 'cpp_info.build_modules' used in: bzip2/1.0.8
WARN: deprecated: 'env_info' used in: glib/2.78.3, bzip2/1.0.8, libiconv/1.17, pcre2/10.42
======== Finalizing install (deploy, generators) ========
conanfile.txt: Writing generators to C:\Users\Jonathon\source\tlsdump-main\tlsdump-main\build
conanfile.txt: Generator 'CMakeDeps' calling 'generate()'
conanfile.txt: CMakeDeps necessary find_package() and targets for your CMakeLists.txt
find_package(glib)
target_link_libraries(... glib::glib)
conanfile.txt: Generator 'CMakeToolchain' calling 'generate()'
conanfile.txt: CMakeToolchain generated: conan_toolchain.cmake
conanfile.txt: Preset 'conan-default' added to CMakePresets.json. Invoke it manually using 'cmake --preset conan-default' if using CMake>=3.23
conanfile.txt: If your CMake version is not compatible with CMakePresets (<3.23) call cmake like: 'cmake <path> -G "Visual Studio 17 2022" -DCMAKE_TOOLCHAIN_FILE=C:\Users\Jonathon\source\tlsdump-main\tlsdump-main\build\conan_toolchain.cmake -DCMAKE_POLICY_DEFAULT_CMP0091=NEW'
conanfile.txt: CMakeToolchain generated: CMakePresets.json
conanfile.txt: CMakeToolchain generated: ..\CMakeUserPresets.json
conanfile.txt: Generating aggregated env files
conanfile.txt: Generated aggregated env files: ['conanbuild.bat', 'conanrun.bat']
Install finished successfully
-- Selecting Windows SDK version 10.0.22621.0 to target Windows 10.0.19045.
-- Checking for one of the modules 'glib-2.0'
CMake Error at C:/Program Files/CMake/share/cmake-3.29/Modules/FindPkgConfig.cmake:927 (message):
None of the required 'glib-2.0' found
Call Stack (most recent call first):
CMakeLists.txt:20 (pkg_search_module)
-- Configuring incomplete, errors occurred!
C:\Users\Jonathon\source\tlsdump-main\tlsdump-main\build>cd ..
C:\Users\Jonathon\source\tlsdump-main\tlsdump-main>conan install . --output-folder=build && cd build && cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake && cmake --build
======== Input profiles ========
Profile host:
[settings]
arch=x86_64
build_type=Release
compiler=msvc
compiler.cppstd=14
compiler.runtime=dynamic
compiler.runtime_type=Release
compiler.version=193
os=Windows
Profile build:
[settings]
arch=x86_64
build_type=Release
compiler=msvc
compiler.cppstd=14
compiler.runtime=dynamic
compiler.runtime_type=Release
compiler.version=193
os=Windows
======== Computing dependency graph ========
Graph root
conanfile.txt: C:\Users\Jonathon\source\tlsdump-main\tlsdump-main\conanfile.txt
Requirements
bzip2/1.0.8#457c272f7da34cb9c67456dd217d36c4 - Cache
glib/2.78.3#0cd1865c8603d90b3bc5858065e16d01 - Cache
libffi/3.4.4#35eb63842b505824b70aedc1baefc916 - Cache
libgettext/0.22#2c87563d7a69544dd9379f038aca3b0b - Cache
libiconv/1.17#73fefc1b696e069df90fd1d18aa63edd - Cache
pcre2/10.42#a7a2c122056510509a7525c83d6a6695 - Cache
zlib/1.3.1#f52e03ae3d251dec704634230cd806a2 - Cache
Build requirements
autoconf/2.71#f9307992909d7fb3df459340f1932809 - Cache
automake/1.16.5#058bda3e21c36c9aa8425daf3c1faf50 - Cache
m4/1.4.19#b38ced39a01e31fef5435bc634461fd2 - Cache
meson/1.2.2#04bdfb85d665c82b08a3510aee3ffd19 - Cache
msys2/cci.latest#5a31efa2bde593541fd5ac3bcc50c01c - Cache
ninja/1.11.1#77587f8c8318662ac8e5a7867eb4be21 - Cache
pkgconf/2.0.3#f996677e96e61e6552d85e83756c328b - Cache
Resolved version ranges
zlib/[>=1.2.11 <2]: zlib/1.3.1
======== Computing necessary packages ========
Requirements
bzip2/1.0.8#457c272f7da34cb9c67456dd217d36c4:67bfcb7b4b78262b9d05495e479dcd92f747316b#cea9c0f0dfa41e83aebd5d39c5a5cbf3 - Cache
glib/2.78.3#0cd1865c8603d90b3bc5858065e16d01:750e9c8cf560085c96c0fa42531c45c18af8be50#29d02404508c39a0803c3bee40426924 - Cache
libffi/3.4.4#35eb63842b505824b70aedc1baefc916:7bfde258ff4f62f75668d0896dbddedaa7480a0f#37e6c892e9418389fcf21227e9c1ae6b - Cache
libgettext/0.22#2c87563d7a69544dd9379f038aca3b0b:55052839d1d508208c0cd4c7594a7001c70287d1#bea6a5629dc31a80b4d489e5ef163ec4 - Cache
libiconv/1.17#73fefc1b696e069df90fd1d18aa63edd:7bfde258ff4f62f75668d0896dbddedaa7480a0f#9ef92719f5c05dca2f0dbb46f50d3f8d - Cache
pcre2/10.42#a7a2c122056510509a7525c83d6a6695:1bbffc30d8479a890917ef6674ab5e5f3c5b2036#d6a7c0162d1450645a9d56832ca25ae6 - Cache
zlib/1.3.1#f52e03ae3d251dec704634230cd806a2:7bfde258ff4f62f75668d0896dbddedaa7480a0f#20d10b761ec15eed7a1d61c86bc7415a - Cache
Build requirements
Skipped binaries
autoconf/2.71, automake/1.16.5, m4/1.4.19, meson/1.2.2, msys2/cci.latest, ninja/1.11.1, pkgconf/2.0.3
======== Installing packages ========
bzip2/1.0.8: Already installed! (1 of 7)
zlib/1.3.1: Already installed! (2 of 7)
libiconv/1.17: Already installed! (3 of 7)
libffi/3.4.4: Already installed! (4 of 7)
pcre2/10.42: Already installed! (5 of 7)
pcre2/10.42: Appending PATH environment variable: C:\Users\Jonathon\.conan2\p\pcre2e09694aa47719\p\bin
libgettext/0.22: Already installed! (6 of 7)
glib/2.78.3: Already installed! (7 of 7)
WARN: deprecated: Usage of deprecated Conan 1.X features that will be removed in Conan 2.X:
WARN: deprecated: 'cpp_info.names' used in: pcre2/10.42, libiconv/1.17, bzip2/1.0.8, zlib/1.3.1, libgettext/0.22
WARN: deprecated: 'cpp_info.build_modules' used in: bzip2/1.0.8
WARN: deprecated: 'env_info' used in: pcre2/10.42, bzip2/1.0.8, glib/2.78.3, libiconv/1.17
======== Finalizing install (deploy, generators) ========
conanfile.txt: Writing generators to C:\Users\Jonathon\source\tlsdump-main\tlsdump-main\build
conanfile.txt: Generator 'CMakeDeps' calling 'generate()'
conanfile.txt: CMakeDeps necessary find_package() and targets for your CMakeLists.txt
find_package(glib)
target_link_libraries(... glib::glib)
conanfile.txt: Generator 'CMakeToolchain' calling 'generate()'
conanfile.txt: CMakeToolchain generated: conan_toolchain.cmake
conanfile.txt: Preset 'conan-default' added to CMakePresets.json. Invoke it manually using 'cmake --preset conan-default' if using CMake>=3.23
conanfile.txt: If your CMake version is not compatible with CMakePresets (<3.23) call cmake like: 'cmake <path> -G "Visual Studio 17 2022" -DCMAKE_TOOLCHAIN_FILE=C:\Users\Jonathon\source\tlsdump-main\tlsdump-main\build\conan_toolchain.cmake -DCMAKE_POLICY_DEFAULT_CMP0091=NEW'
conanfile.txt: CMakeToolchain generated: CMakePresets.json
conanfile.txt: CMakeToolchain generated: ..\CMakeUserPresets.json
conanfile.txt: Generating aggregated env files
conanfile.txt: Generated aggregated env files: ['conanbuild.bat', 'conanrun.bat']
Install finished successfully
-- Selecting Windows SDK version 10.0.22621.0 to target Windows 10.0.19045.
-- Checking for one of the modules 'glib-2.78.3'
CMake Error at C:/Program Files/CMake/share/cmake-3.29/Modules/FindPkgConfig.cmake:927 (message):
None of the required 'glib-2.78.3' found
Call Stack (most recent call first):
CMakeLists.txt:20 (pkg_search_module)
-- Configuring incomplete, errors occurred!
И для меня это действительно не имеет смысла, потому что при установке пакетов четко отображается эта строка ярко-зеленого цвета: glib/2.78.3: Already installed! (7 of 7)
, а вскоре после этого она все еще показывает:
-- Checking for one of the modules 'glib-2.78.3'
CMake Error at C:/Program Files/CMake/share/cmake-3.29/Modules/FindPkgConfig.cmake:927 (message):
None of the required 'glib-2.78.3' found
Так что я действительно понятия не имею, что происходит. glib явно установлен, но cmake pkgconfig по какой-то причине все еще не находит его. Что я делаю не так?
Результат: pkg-config: could not find package 'glib-2.0'
Я попробовал следовать совету здесь, но установка GTK не решила проблему.
Кроме того, я только что отредактировал исходное сообщение, включив в него некоторые вещи, которые я пробовал до сих пор, например, установку glib с помощью conan, что до сих пор не решило проблему, с которой pkgmanager не нашел его. Я испробовал все, что только мог придумать, и, возможно, есть еще что попробовать, но это мой первый раз, когда я вообще компилирую проект C++, так что я также впервые использую cmake.
И вывод pkg-config glib-2.0
по-прежнему равен pkg-config: could not find package 'glib-2.0'
Вы рассматривали возможность использования MSYS2? Я только что попробовал: pacman -S mingw-w64-ucrt-x86_64-glib2
установить glib, затем pkg-config --libs --cflags glib-2.0
распечатать флаги.
Спасибо, я попробую, когда приду домой и сообщу, сработает ли это. Самое главное — то, что работает, но мне любопытно узнать, что на самом деле вызывает проблему.
Я никогда раньше не использовал ни один из этих инструментов сборки C++, поэтому понятия не имею, каково ожидаемое поведение любого из них. Все, что у меня есть, — это знания других языков программирования (более высокого уровня), таких как Python и C#. Обычно я хорошо решаю проблемы, но у меня нет опыта работы с C++.
Я думаю, pkg-config
читает некоторые переменные env, чтобы знать, где искать библиотеки (PKG_CONFIG_PATH
, PKG_CONFIG_LIBDIR
). Предполагается также, что у него есть каталоги по умолчанию, но я не уверен, какие они есть для загруженной вами автономной версии. Вот почему я всегда предлагаю в таких ситуациях MSYS2: они настраивают поставляемые инструменты для совместной работы. Вы устанавливаете библиотеку, и она появляется в pkg-config
и CMake с нулевой конфигурацией (если это не очевидно, нужно установить из них все инструменты: CMake, pkg-config, gcc и glib). Это тот опыт, который вы получите в Linux «из коробки».
Отличная информация, спасибо. На самом деле я обычно являюсь пользователем Linux, но это должно быть в Windows. Также, пожалуйста, напишите ответ вместо комментария, и если ваше решение сработает, я награду вас наградой.
Скорее всего, PKG_CONFIG_LIBDIR неверен. Это объясняет, почему в этом посте (в котором есть то же сообщение об ошибке, что и у меня) решением было удалить строку из CMakeLists.txt, которая была связана именно с этой переменной env.
Также, чтобы уточнить, какой из этих двух способов должен работать? (1) glib или любой другой пакет загружается и устанавливается непосредственно в проект, который необходимо скомпилировать, и больше нигде. Или (2) существует какой-то глобальный каталог, в который вы устанавливаете пакеты типа glib, а затем они добавляются в проект? Я думаю, что первое имеет больше смысла, но я не знаю.
MSYS2 устанавливается глобально. Он работает так же, как дистрибутив Linux (и использует pacman
Arch для управления пакетами). Я не уверен, как Конан это делает.
Подводя итог моему объяснению в комментариях:
Должна быть возможность установить переменную среды PKG_CONFIG_PATH
, чтобы указать на установку glib. pkg-config
ищет библиотеки в каталогах, указанных в этой переменной (и некоторых других).
Но вместо ручной настройки я бы лучше рекомендовал использовать MSYS2. Используйте его для установки всех необходимых инструментов: pacman -S mingw-w64-ucrt-x86_64-gcc mingw-w64-ucrt-x86_64-pkgconf mingw-w64-ucrt-x86_64-cmake mingw-w64-ucrt-x86_64-glib2
.
Откройте терминал MSYS2 и скомпилируйте его (чтобы установить правильные переменные env). Убедитесь, что в подсказке терминала написано UCRT64
пурпурным текстом (Что такое среды MSYS2? Как мне выбрать одну?).
Вы можете попробовать pkg-config --libs --cflags glib-2.0
и увидеть, что он находит библиотеку.
Спасибо за Ваш ответ. Хотя это решает проблему, связанную с тем, что pkg-config не находит glib-2.0, о чем я и задавал, есть еще дополнительные шаги для его компиляции, над которыми я все еще разбираюсь. Когда я установил эти пакеты в MSYS2, а затем набрал команду pkg-config --libs --cflags glib-2.0
, он их нашел. Затем я вчера попробовал сборку, и он сказал, что все прошло успешно, но я не могу найти никаких двоичных файлов, а каталог, в который, как говорится, были записаны файлы сборки, вообще не содержит никаких файлов .exe или каких-либо исполняемых файлов. Наверное я опять что-то не так понял.
Также это цитата из документации MSYS2: «При создании проектов для Windows с помощью CMake (в отличие от создания проектов, которые будут выполняться в среде выполнения эмуляции posix MSYS2) обязательно установите версию CMake MinGW, т. е. установите например, mingw-w64-x86_64-cmake". Означает ли это, что сборки среды ucrt будут работать только из терминала MSYS2?
ПС. Вам не обязательно отвечать, поскольку вы уже ответили на исходный вопрос, но я был бы признателен, если бы вы все же смогли это прояснить.
@JonathonQuick "будет работать только из терминала MSYS2?" Нет, они плохо выразились. Они говорят, что нужно устанавливать не cmake
, а mingw-...-cmake
. Какой из последних, ucrt или нет, особого значения не имеет. (Первый принадлежит среде «MSYS», см. вторую ссылку в моем ответе и/или msys2.org/docs/environments). Что касается того, где находятся ваши exe-файлы, они должны быть там. Попробуйте поискать в подкаталогах или задайте целый отдельный вопрос со всеми подробностями.
«Он сказал, что все прошло успешно, но я не могу найти никаких двоичных файлов, а каталог, в который, как говорится, были записаны файлы сборки, вообще не содержит никаких файлов .exe или каких-либо исполняемых файлов». — Запуск cmake
лишь настраивает проект. Для сборки запустите cmake --build
из каталога сборки.
@JonathonQuick ^
Вы установили glib? Что выводит
pkg-config glib-2.0
?