в итоге после компиляции some.cpp идет попытка компилировать dataset1.cpp dataset2.cpp. как обьяснить CMAKE что так делать не нужно? Пробовал target_sources() тоже самое
Еще заменил если генерировать в какие-то makefile то *.h игнорируются, а ведь по идее они должны добавлятся в зависимости чтобы при их измениние код перекомпилировался. Что удивительно в VS project сам! находит эти зависимости и такой проблемы нету.
Может есть другая кроссплатформеная система сборки?
Здравствуйте, m11, Вы писали:
m11>в итоге после компиляции some.cpp идет попытка компилировать dataset1.cpp dataset2.cpp. как обьяснить CMAKE что так делать не нужно? Пробовал target_sources() тоже самое
Примерно так:
Здравствуйте, Skorodum, Вы писали:
m11>>в итоге после компиляции some.cpp идет попытка компилировать dataset1.cpp dataset2.cpp. как обьяснить CMAKE что так делать не нужно? Пробовал target_sources() тоже самое S>Примерно так:
S>
R>вообще файлы которые инклудятся в some.cpp указывать не надо R>их cmake найдет и сделает депенденсы сам
Как я понял их не cmake находит а студия. Делал "Unix Makefiles" "Borland Makefiles" там вообще нет упоминаний депендесов.
R>нет системы сборки луче чем cmake
Если это лучшая то какая тогда худшая(((
Вот есть
add_executable(foo one.cpp two.cpp one.h two.h)
теперь надо сделать тоже самое но допустим one.cpp скомпилировать с ключом -D_ENABLE_SORT_BUBBLE и как это сделать?
если добавить
но теперь все таргеты будут компилится с -D_ENABLE_SORT_BUBBLE выход использовать add_library но это не очень то эффективно, оно будет делать Lib файл даже если указать OBJECT
казалось бы добавь что-то типа set_Target_source_files_properties() не я что-то не вижу этой функции. А ведь Cmake лет 10 уже не меньше.
Cmake глючная и непродуманая система ей пользуются потому что нет альтернатив.
R>или вы хотите завязаться на какую то не популярную систему ? R>ну это тоже самое что учить умирающие языки
Здравствуйте, m11, Вы писали:
m11>Щас попробую обновить свой CMAKE 3.19
Все работает, версия CMake тут не причем, у вас имена переменных напутаны: "GENERATOR_INPUT" и "GENERATED_INPUT".
Вот рабочий код для вашего проекта:
Здравствуйте, reversecode, Вы писали:
m11>>Cmake глючная и непродуманая система ей пользуются потому что нет альтернатив.
R>говорят так только те кто не хочет изучить что то новое R>а хочет свою логику в голове переложить в уже чю то существующую
Ну да некоторые изучили cmake например и больше ничого нового не хотят знать.
R>для таких людей есть книга
R>Craig Scott R>Professional CMake: A Practical Guide
R>изучайте
да там простенькие проекты
система сборки как минимум должна предоставить возможность задать ключи компилятора, а тут можна задать глобально для одного .cpp но во всех таргетах, один и тотже .cpp нельзя использовать в разных таргетах это если юзать add_*(таргет source1.cpp source2.cpp)
Если юзать add_library то да можно но все удобство куда-то пропадает когда проект за 100 таргетов.
Еще вот пример интуитивного интерфейса:
target_compile_definitions(target PRIVATE -D_DEBUG_)
а кустомные команды с бубнами add_custom_target
Сама компиляция стало гораздо медленей даже в nmake
Мне думается cmake такой запутаный специально ибо такая бизнес модель.
Единственный плюс это мультиплатформа
Хотелось бы уведеть еще систем сборки
R>я думаю высший разум который создавал человека в лице вас R>если бы делал вас — "лишь бы работало" R>вы были бы очень не довольны им
Здравствуйте, Skorodum, Вы писали:
S>Здравствуйте, m11, Вы писали:
m11>>Щас попробую обновить свой CMAKE 3.19 S>Все работает, версия CMake тут не причем, у вас имена переменных напутаны: "GENERATOR_INPUT" и "GENERATED_INPUT". S>Вот рабочий код для вашего проекта: S>
Здравствуйте, m11, Вы писали:
m11>Вот есть m11>add_executable(foo one.cpp two.cpp one.h two.h) m11>теперь надо сделать тоже самое но допустим one.cpp скомпилировать с ключом -D_ENABLE_SORT_BUBBLE и как это сделать? m11>если добавить m11>set_source_files_properties(one.cpp PROPERTIES COMPILE_FLAGS -D_ENABLE_SORT_BUBBLE) m11>add_executable(foo_test one.cpp two.cpp one.h two.h) m11>но теперь все таргеты будут компилится с -D_ENABLE_SORT_BUBBLE
Нет, все будет работать как надо. Смотрите ваш код внимательно, у вас опять где-то ошибка.
m11>выход использовать add_library но это не очень то эффективно, оно будет делать Lib файл даже если указать OBJECT
Нет.
m11>Cmake глючная и непродуманая система ей пользуются потому что нет альтернатив.
Нет.
1. У CMake есть проблемы, но не те, что вы перечислили.
2. Альтернативы есть (qbs, meson, build2, etc.)
m11>Да мне лиш бы работало.
Все работает. Очень сложные проекты собираются CMake.
Здравствуйте, m11, Вы писали:
m11>Здравствуйте, reversecode, Вы писали:
m11>>>Cmake глючная и непродуманая система ей пользуются потому что нет альтернатив.
R>>говорят так только те кто не хочет изучить что то новое R>>а хочет свою логику в голове переложить в уже чю то существующую
m11>Ну да некоторые изучили cmake например и больше ничого нового не хотят знать.
строго говоря, я cmake изучил в этом году, потратил аж целых два дня
до этого все проекты писал на обычных makefile
и выбирал среди разных альтернатив
критерии требования были
— язык на котором разрабатывается альтернатива — C/C++
— умение генерить makefile для виндовых nmake
— распространенность среди опенсорс С/С++ проектов
в итоге выбрал cmake
поскольку большинство опенсорс проектов которые мониторю, тоже используют его
ну и говорят что кто то активно контрибютит cmake + msvc, поговаривают что мол ms доплачивают разрабам cmake
да еще оказывается его и на собеседованиях начали часто спрашивать
можете посмотреть в сторону build2 его вроде гугл использует
но мне он не понравился
Здравствуйте, Skorodum, Вы писали:
m11>>Спасибо, cmake может генерировать файлы, но проблема несколько в другой плоскости S>В какой?
В том что бы задать ключи компиляции. Те исходный файл один но с разными дефайнами будет разное поведение и чтобы проверить все варианты в разных "таргетах" надо постаратся. Если использовать add_executable(bla source1.cpp source2.cpp) set_source_files_properties ключи задаются для исходника сразу во всех таргетах в разный таргет нельзя передать разный дефайн. add_library target_link_libraries может но зачем тогда такой дизайн у add_executable?
Здравствуйте, m11, Вы писали:
m11>Здравствуйте, Skorodum, Вы писали:
m11>>>Спасибо, cmake может генерировать файлы, но проблема несколько в другой плоскости S>>В какой?
m11>В том что бы задать ключи компиляции.
Тогда ваше "но" тут совсем неуместно. С первой вашей проблемой разобрались, это другая.
m11>Те исходный файл один но с разными дефайнами будет разное поведение и чтобы проверить все варианты в разных "таргетах" надо постаратся. Если использовать add_executable(bla source1.cpp source2.cpp) set_source_files_properties ключи задаются для исходника сразу во всех таргетах в разный таргет нельзя передать разный дефайн. add_library target_link_libraries может но зачем тогда такой дизайн у add_executable?
Разные ключи, конечно же, можно передать в разные цели.
Если один и тот же файл надо с разными ключами подключать в разные цели, то надо разбить файл и не мучаться.