LINUX.ORG.RU

История изменений

Исправление 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 есть много вещей на которые можно ткнуть пальцем и сказать «это должно быть проще/лучше/понятнее»