Итак, я провел поиск в Google, и у него очень мало знаний. Каким был бы эффективный и надежный способ определения, используется ли X11 или Wayland, предпочтительно во время компиляции и с CMake? Мне нужно применить это к моему проекту C ++.
Я предполагаю, что вы хотите оценивать сервер дисплея во время компиляции, при вызове CMake, а не для каждой компиляции. Вот так работает CMake и его надо использовать горячим. Недостатком является то, что вам придется перезапускать CMake для каждого измененного сервера дисплея.
В настоящее время нет способа определения работающего сервера дисплея по умолчанию. Аналогично, отсутствует фрагмент кода по умолчанию для оценки сервера дисплея по CMake. Просто выбери один из способов обнаружения дисплея сервер, который вручную работает для вас или вашей среды соответственно.
Вызовите этот код из CMake и сохраните результат в переменной и используйте его для своего кода C ++.
Например loginctl show-session $(loginctl | grep $(whoami) | awk '{print $1}') -p Type
работает для меня. В результате проверка CMake
execute_process(
"loginctl show-session $(loginctl | grep $(whoami) | awk '{print $1}') -p Type"OUTPUT_VARIABLE result_display_server)
if ("${resulting_display_server}" EQUALS "Type=x11")
set(display_server_x11 TRUE)
else()
set(display_server_x11 FALSE)
endif()
Вероятно, вы должны возиться с условием и проверить Type=wayland
или аналогичный, чтобы заставить его правильно работать в вашей среде.
Ты можешь использовать display_server_x11
а также запишите это в config.h
файл использовать его в коде C ++.
Других решений пока нет …