Исправление EXL, (текущая версия) :
который типа закрывает брешь.
Вспомнил ещё несколько наркоманских приколов CMake, с которыми сталкивался лично.
1. В Qt-проектах если cpp-файлы и хедеры лежат в разных директориях то бишь, к примеру, src/ для .cpp и include/ для .h, то кодогенератор MOC просто не запускается.
Решение костылём: свалить всё в одну директорию или напихать заголовочные файлы в add_executable()
Посты на ЛОРе с этой проблемой:
Как сделать из Qt pro проекта CMake? (комментарий)
Cmake Qt 5.6 undefined reference to vtable (комментарий)
2. Использование кастомных линкёров, вроде того же gold или тех, что имеются в Embedded-тулчейнах.
Раньше переменная CMAKE_C_COMPILER
определяла не только компилятор, но и линковщик. Переменной для задания своего линкёра тупо не было.
Решение было костылём: лезть в дебри CMake и использовать всякие хаки, вроде переменной CMAKE_C_LINK_EXECUTABLE
со всей строкой линковки, которую нужно было оборачивать скриптом-прокладкой, потому что параметры были захардкожены и передавались только для GCC-совместимых линковщиков.
Не знаю, изменилась ли ситуация сейчас, но такая наркомания это последствия ущербного проектирования. У CMake есть много вещей на которые можно ткнуть пальцем и сказать «это должно быть проще/лучше/понятнее». И это только то, что сразу вспомнилось. Там куча подводных камней в любом направлении, если твоя задача чуть-чуть выходит за рамки описанных в документации примеров использования.
Исходная версия EXL, :
который типа закрывает брешь.
Вспомнил ещё несколько наркоманских приколов CMake, с которыми сталкивался лично.
1. В Qt-проектах если cpp-файлы и хедеры лежат в разных директориях то бишь, к примеру, src/ для .cpp и include/ для .h, то кодогенератор MOC просто не запускается.
Решение костылём: свалить всё в одну директорию или напихать заголовочные файлы в add_executable()
Посты на ЛОРе с этой проблемой:
Как сделать из Qt pro проекта CMake? (комментарий)
Cmake Qt 5.6 undefined reference to vtable (комментарий)
2. Использование кастомных линкёров, вроде того же gold или тех, что имеются в Embedded-тулчейнах.
Раньше переменная CMAKE_C_COMPILER
определяла не только компилятор, но и линковщик. Переменной для задания своего линкёра тупо не было.
Решение было костылём: лезть в дебри CMake и использовать всякие хаки, вроде переменной CMAKE_C_LINK_EXECUTABLE
со всей строкой линковки, которую нужно было оборачивать скриптом-прокладкой, потому что параметры были захардкожены и передавались только для GCC-совместимых линковщиков.
Не знаю, изменилась ли ситуация сейчас, но такая наркомания это последствия ущербного проектирования. У CMake есть много вещей на которые можно ткнуть пальцем и сказать «это должно быть проще/лучше/понятнее»