Честно, не представляю себе, как можно дальше жить в мире, где нормальным считается применение инструмента, провоцирующего на написание чего-то вроде:
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++ к чертям собачим не нарушая никаких обязательств. Почему не воспользовался... Эх.
Очень похоже на "генераторы" CMAKE, тоже тот ещё подарок...
ОтветитьУдалитьВ популярности CMake виноват КДЕ, когда начали делать КДЕ4 - после технического анализа разных инструментов сборки - был выбран SCons, который оказался на голову выше всех остальных, но из-за плохой обратной связи с его разработчиками, они переключились на CMake - разработчики которого отвечали быстро и на любой вопрос, а сейчас просто набралась "критическая масса".
переход КДЕ на SCons
https://www.opennet.ru/opennews/art.shtml?num=6071
Здесь причины перехода на CMake
http://lwn.net/Articles/188693/
Гугл кстати использует basel для С++
@Sergey Borisov
ОтветитьУдалитьЭто, видимо, только первый поворот в сторону победившего маразма.
Вторым было добавление поддержки CMake в IDE.
Generator expressions не самые приятные в новом синтаксисе :)
ОтветитьУдалитьНо хоть какая-то замена куче if-ов.