Вот просто как в .net Framework, но только с чем-нибудь вроде set(DOTNET_TARGET_FRAMEWORK "net5.0") в CMakeLists, а потом `cmake .` и готово? Безо всяких там сгенериривать один проект, а потом руками/powershell-скриптом его исправить, и прочих танцев с бубном?
Здравствуйте, BigBoss, Вы писали:
BB>Вот просто как в .net Framework, но только с чем-нибудь вроде set(DOTNET_TARGET_FRAMEWORK "net5.0") в CMakeLists, а потом `cmake .` и готово? Безо всяких там сгенериривать один проект, а потом руками/powershell-скриптом его исправить, и прочих танцев с бубном?
Здравствуйте, BigBoss, Вы писали:
BB>Вот просто как в .net Framework, но только с чем-нибудь вроде set(DOTNET_TARGET_FRAMEWORK "net5.0") в CMakeLists, а потом `cmake .` и готово? Безо всяких там сгенериривать один проект, а потом руками/powershell-скриптом его исправить, и прочих танцев с бубном?
dotnet build и dotnet publish он из коробки и 1) кроссплатформенный 2) кроссверсионный. ос и проц задается параметром -r а версия фрейморка -f. Если нужны native библотеки это dotnet тоже из коробки разруливает.
Здравствуйте, _NN_, Вы писали:
_NN>Здравствуйте, BigBoss, Вы писали:
BB>>Вот просто как в .net Framework, но только с чем-нибудь вроде set(DOTNET_TARGET_FRAMEWORK "net5.0") в CMakeLists, а потом `cmake .` и готово? Безо всяких там сгенериривать один проект, а потом руками/powershell-скриптом его исправить, и прочих танцев с бубном?
_NN>Расскажете чем dotnet build не подходит ?
dotnet build собирает проект из готовых proj/sln, а CMake как раз эти самые proj/sln генерирует.
Вопрос как раз был, как их сгенерировать, а не что делать с ними потом
Здравствуйте, VladCore, Вы писали:
VC>Здравствуйте, BigBoss, Вы писали:
BB>>Вот просто как в .net Framework, но только с чем-нибудь вроде set(DOTNET_TARGET_FRAMEWORK "net5.0") в CMakeLists, а потом `cmake .` и готово? Безо всяких там сгенериривать один проект, а потом руками/powershell-скриптом его исправить, и прочих танцев с бубном?
VC>dotnet build и dotnet publish он из коробки и 1) кроссплатформенный 2) кроссверсионный. ос и проц задается параметром -r а версия фрейморка -f. Если нужны native библотеки это dotnet тоже из коробки разруливает.
вопрос был не про то, как имея proj/sln файлы что-нибудь собрать, как это делает dotnet build, а про то, как эти самые proj/sln сгенерировать
Здравствуйте, BigBoss, Вы писали:
BB>>>Вот просто как в .net Framework, но только с чем-нибудь вроде set(DOTNET_TARGET_FRAMEWORK "net5.0") в CMakeLists, а потом `cmake .` и готово? Безо всяких там сгенериривать один проект, а потом руками/powershell-скриптом его исправить, и прочих танцев с бубном?
VC>>dotnet build и dotnet publish он из коробки и 1) кроссплатформенный 2) кроссверсионный. ос и проц задается параметром -r а версия фрейморка -f. Если нужны native библотеки это dotnet тоже из коробки разруливает.
BB>вопрос был не про то, как имея proj/sln файлы что-нибудь собрать, как это делает dotnet build,
не. я не писал как собрать.
BB> а про то, как эти самые proj/sln сгенерировать
Здравствуйте, VladCore, Вы писали:
VC>>>dotnet build и dotnet publish он из коробки и 1) кроссплатформенный 2) кроссверсионный. ос и проц задается параметром -r а версия фрейморка -f. Если нужны native библотеки это dotnet тоже из коробки разруливает.
BB>>вопрос был не про то, как имея proj/sln файлы что-нибудь собрать, как это делает dotnet build,
VC>не. я не писал как собрать.
А что же тогда по-вашему на самом деле делает dotnet build?
BB>> а про то, как эти самые proj/sln сгенерировать
VC>😂😂😂
VC>dotnet new умеет генерировать proj
В CMake файлы в проект добавляют примерно так:
SET(TARGET_SRC
Main.cs
../Connection.cs
../../common/Logger.cs
)
А как это сделать в коммандой строке dotnet new? Как добавить нужные assembly или просто сделать код unsafe?
Здравствуйте, BigBoss, Вы писали:
BB>>>вопрос был не про то, как имея proj/sln файлы что-нибудь собрать, как это делает dotnet build,
Выполняет MSBuild. Для людей знакомых с темой должно быть понятно, что системы сборки настолько НЕ эквивалентны, что не стоит пытаться решить несуществующую задачу.
MSBuild гораздо мощнее любых недо-make. И в этом же его ахилесова пята, потому что туда интегрировано всё на свете, включая менеджер пакетов. (грубо говоря)
Поэтому единственный правильный способ работы с C#/dotnet и организовать сборку там — это не игнорировать встроенные возможности. Собрать проекты с помощью csc — это не проблема. Проблемы начнуться когда начнут просвечивать нюансы, особенно через года, да такие о которых вы знать не слыхивали.
Просто откройте дотнет сдк и посчитайте размер *.targets и *.props файлов. После этого — если и были вопросы — желание повторить хотя бы четвертинку из этого — должна отпасть.
Здравствуйте, BigBoss, Вы писали: BB>А откуда он берётся, этот "файл проекта"?
dotnet new
S>>Не очень понимаю, вам это всё зачем? Вы хотите порождать проект автоматически? BB>Да, погуглите CМake для общего развития. Он уже много лет в MSVC есть
Повторю вопрос: вам это всё зачем? Обычно проект создаётся один раз. А потом много лет развивается. Поэтому не очень важно, как именно устроено порождение проекта.
Мне интересен ваш сценарий от начала и до конца: что именно вы хотите автоматизировать и почему. Конкретные инструменты — это конкретные инструменты, их же под задачу подбирают, а не наоборот.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Mystic Artifact, Вы писали:
MA> MSBuild гораздо мощнее любых недо-make. И в этом же его ахилесова пята, потому что туда интегрировано всё на свете, включая менеджер пакетов. (грубо говоря)
А он может скачать свежие исходники какой-нибудь библиотеки с условного Гитхаба и собрать проект с ней? А в случае неудачи, использовать то, что есть локально? Он может парсить и редактировать файлы исходников? кросс компиляция для другой ОС?
Здравствуйте, Nuzhny, Вы писали:
N>Здравствуйте, Mystic Artifact, Вы писали:
MA>> MSBuild гораздо мощнее любых недо-make. И в этом же его ахилесова пята, потому что туда интегрировано всё на свете, включая менеджер пакетов. (грубо говоря)
N>А он может скачать свежие исходники какой-нибудь библиотеки с условного Гитхаба и собрать проект с ней? А в случае неудачи, использовать то, что есть локально? Он может парсить и редактировать файлы исходников? кросс компиляция для другой ОС?
Здравствуйте, _NN_, Вы писали:
_NN>Здравствуйте, Nuzhny, Вы писали:
_NN>В чём вопрос?
Вопрос в том, что глупо называть кроссплатформенный, тьюринг-полный cmake, с помощью которого собирается куча проектов, недомэйком. Он более мета инструмент, чем msbuild
Здравствуйте, Sinclair, Вы писали:
S>>>Не очень понимаю, вам это всё зачем? Вы хотите порождать проект автоматически?
Раз уж речь, про cmake, то он как раз и используется для генерации проектов, включения и исключения их массово.
Например, есть большой проект OoenCV. В максимальной комплектации он вполне может включать в себя тысячу проектов. Отключать можно что угодно: тесты, примеры, проекты для интеграции с Питоном, Java, Julia... Можно отдельные модули. Если нет зависимости для какого-то модуля, то автоматически отключаются все, которые зависят от него. Можно собирать все модули статически, можно каждый в своей dll, можно все в одной большой dll.
Можно для windows, Linux, mac, android, ios...Можно выбирать тулчейны для сборки. Он сам скачивает зависимости с гитхаба. Или данные (веса нейросетки), или библиотеки (Intel IPP). Собирает, копирует, делает install.
Здравствуйте, Nuzhny, Вы писали:
S>>>>Не очень понимаю, вам это всё зачем? Вы хотите порождать проект автоматически? N>Раз уж речь, про cmake, то он как раз и используется для генерации проектов, включения и исключения их массово. N>Например, есть большой проект OoenCV. В максимальной комплектации он вполне может включать в себя тысячу проектов. Отключать можно что угодно: тесты, примеры, проекты для интеграции с Питоном, Java, Julia... Можно отдельные модули.
Преимущество не только в гибкой конфигурации, но например ещё и в том что можно обобщать и переиспользовать отдельные куски как функции/макросы, делать циклы по каким-либо последовательностям и т.п.
Например есть десяток целей определение которых отличается лишь одним параметром — соответственно это можно выразить как функцию с одним параметром и цикл по списку этих параметров вызывающий эту функцию. С развитием проекта можно рефракторить и обобщать, так как определение проекта это обычный код.
Здравствуйте, Sinclair, Вы писали:
BB>>Да, погуглите CМake для общего развития. Он уже много лет в MSVC есть S>Повторю вопрос: вам это всё зачем? S>Обычно проект создаётся один раз. А потом много лет развивается. Поэтому не очень важно, как именно устроено порождение проекта.
В случае CMake это не так. Проект порождается сколько угодно раз, с какими угодно настройками из CMake-овского кода. И изменения вносятся непосредственно в CMake'овский код, что приводит к регенерации всего или части проектных файлов.
Грубо говоря CMake это не обычная система сборки. Он использует другие системы сборки как бэкэнды, и из единого описания проекта можно генерировать проектные файлы для разных бэкэндов.
Здравствуйте, Mystic Artifact, Вы писали:
BB>>>>вопрос был не про то, как имея proj/sln файлы что-нибудь собрать, как это делает dotnet build, MA> Выполняет MSBuild. Для людей знакомых с темой должно быть понятно, что системы сборки настолько НЕ эквивалентны, что не стоит пытаться решить несуществующую задачу.
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Здравствуйте, Nuzhny, Вы писали:
S>>>>>Не очень понимаю, вам это всё зачем? Вы хотите порождать проект автоматически? N>>Раз уж речь, про cmake, то он как раз и используется для генерации проектов, включения и исключения их массово. N>>Например, есть большой проект OoenCV. В максимальной комплектации он вполне может включать в себя тысячу проектов. Отключать можно что угодно: тесты, примеры, проекты для интеграции с Питоном, Java, Julia... Можно отдельные модули.
EP>Преимущество не только в гибкой конфигурации, но например ещё и в том что можно обобщать и переиспользовать отдельные куски как функции/макросы, делать циклы по каким-либо последовательностям и т.п. EP>Например есть десяток целей определение которых отличается лишь одним параметром — соответственно это можно выразить как функцию с одним параметром и цикл по списку этих параметров вызывающий эту функцию. С развитием проекта можно рефракторить и обобщать, так как определение проекта это обычный код.
Есть подозрение, что если вместо CMake взять MSBuild и так же с ним заморочиться, то окажется, что всё это можно сделать и на xml, но это ж разбираться надо, а CMake кто-то когда-то уже изучил и зачем что-то новое учить
Здравствуйте, karbofos42, Вы писали:
K>Есть подозрение, что если вместо CMake взять MSBuild и так же с ним заморочиться, то окажется, что всё это можно сделать и на xml, но это ж разбираться надо, а CMake кто-то когда-то уже изучил и зачем что-то новое учить