Настройка библиотеки GTK4.0 с помощью CMake

Я пытался настроить GTK4.0 в своем проекте C, но я еще не нашел ничего, что работало бы, кроме, возможно, жесткого включения каждого каталога в установленной мной версии gtk, но я, понятно, хочу иметь более элегантное решение. .

Извините, если проблема проста, мне действительно нужно это сделать... Вот текущий файл CMakeLists:

cmake_minimum_required(VERSION 3.12)
project(ProjectCESGI C)

set(CMAKE_C_STANDARD 99)
set(CMAKE_C_FLAGS "-Wall")

find_package(PkgConfig REQUIRED)
pkg_check_modules(GTK REQUIRED gtk-4.0)

include_directories(${GTK4_INCLUDE_DIRS})
link_directories(${GTK4_LIBRARY_DIRS})

add_definitions(${GTK4_CFLAGS_OTHER})

target_link_libraries(gtk_test ${GTK4_LIBRARIES})

link_directories(C:/gtk-build/gtk/x64/release/lib)
link_libraries(gtk)
add_executable(ProjectCESGI main.c)
target_link_libraries(ProjectCESGI gtk)

Если вам нужно что-то еще, дайте мне знать.

Я попытался найти выход из ненайденных заголовков, но остановился на полпути, поняв, насколько нелепым был этот процесс. Я также пытался найти пакет, который должен каким-то образом помочь мне установить библиотеку PkgConfig, но это тоже не работает.

Не могли бы вы предоставить пример/минимальный код воспроизведения и шаги для воспроизведения проблемы? Позвольте мне помочь вам, попробовав это с моей стороны

Vidyalatha_Intel 26.12.2022 18:48

Первый параметр, переданный в pkg_check_modules, обозначает префикс для всех переменных, созданных этим вызовом. Поскольку вы передаете здесь GTK, вызов создаст такие переменные, как GTK_INCLUDE_DIRS. Если вы хотите использовать GTK4_INCLUDE_DIRS, вместо этого передайте GTK4 в качестве первого параметра.

Tsyvarev 26.12.2022 22:53
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это должно работать:

cmake_minimum_required(VERSION 3.18)
project(ProjectCESGI LANGUAGES C)

find_package(PkgConfig REQUIRED)
pkg_check_modules(GTK4 REQUIRED IMPORTED_TARGET gtk4)

add_executable(ProjectCESGI main.c)
target_link_libraries(ProjectCESGI PRIVATE PkgConfig::GTK4)

Всегда лучше использовать импортированную цель, когда она доступна, и pkg_check_modules может создать ее для вас с помощью опции IMPORTED_TARGET. Когда вы связываетесь с импортированной целью через target_link_libraries, CMake знает, как настроить соответствующие каталоги включения, каталоги ссылок, определения компиляции и т. д. для использования библиотеки.

Внимательно изучите документацию, если в вашей сборке возникают проблемы с поиском GTK4. Ваша сборка действительно не должна быть более сложной, чем эта.

Оно работает! Я не могу отблагодарить вас за это! Хотя мне и пришлось заменить "gtk-4.0" просто на "gtk4", но, наконец, это работает, как задумано... Еще раз спасибо!

Chachoune963 26.12.2022 19:27

Другие вопросы по теме