вторник, 8 июня 2021 г.

[prog.wtf] Ну вот правда, как с этим жить?

Честно, не представляю себе, как можно дальше жить в мире, где нормальным считается применение инструмента, провоцирующего на написание чего-то вроде:

add_executable(myapp main.cpp foo.c bar.cpp zot.cu)
target_compile_definitions(myapp
  PRIVATE $<$<COMPILE_LANG_AND_ID:CXX,AppleClang,Clang>:COMPILING_CXX_WITH_CLANG>
          $<$<COMPILE_LANG_AND_ID:CXX,Intel>:COMPILING_CXX_WITH_INTEL>
          $<$<COMPILE_LANG_AND_ID:C,Clang>:COMPILING_C_WITH_CLANG>
)

Если кто не в курсе (счастливчики!), то здесь условные операторы в угловых скобках. Вложенные.

И если бы не специальная поддержка в CMake магической COMPILE_LANG_AND_ID, то приведенный выше фрагмент пришлось бы записать вот так:

target_compile_definitions(myapp
  PRIVATE $<$<AND:$<COMPILE_LANGUAGE:CXX>,$<CXX_COMPILER_ID:AppleClang,Clang>>:COMPILING_CXX_WITH_CLANG>
          $<$<AND:$<COMPILE_LANGUAGE:CXX>,$<CXX_COMPILER_ID:Intel>>:COMPILING_CXX_WITH_INTEL>
          $<$<AND:$<COMPILE_LANGUAGE:C>,$<C_COMPILER_ID:Clang>>:COMPILING_C_WITH_CLANG>
)

Я даже уже не пытаюсь представить какому сумрачному гению это все пришло в голову. Более того, я даже не пытаюсь больше понять, почему такое количество разработчиков готовы с этим мирится. Ну вот таков мир, что поделать, остается принимать его каков он есть.

Однако, никогда у меня не бывает настолько же сильного желания уйти навсегда из С++, как в случаях, когда самому приходится погружаться в CMake-код. Да и не только из мира C++, но и вообще из программирования.

PS. Месяца четыре назад была возможность послать C++ к чертям собачим не нарушая никаких обязательств. Почему не воспользовался... Эх.

3 комментария:

Sergey Borisov комментирует...

Очень похоже на "генераторы" CMAKE, тоже тот ещё подарок...
В популярности CMake виноват КДЕ, когда начали делать КДЕ4 - после технического анализа разных инструментов сборки - был выбран SCons, который оказался на голову выше всех остальных, но из-за плохой обратной связи с его разработчиками, они переключились на CMake - разработчики которого отвечали быстро и на любой вопрос, а сейчас просто набралась "критическая масса".

переход КДЕ на SCons
https://www.opennet.ru/opennews/art.shtml?num=6071

Здесь причины перехода на CMake
http://lwn.net/Articles/188693/


Гугл кстати использует basel для С++

eao197 комментирует...

@Sergey Borisov

Это, видимо, только первый поворот в сторону победившего маразма.
Вторым было добавление поддержки CMake в IDE.

Сергей комментирует...

Generator expressions не самые приятные в новом синтаксисе :)
Но хоть какая-то замена куче if-ов.