LINUX.ORG.RU

c++ build system

 ,


0

2

Подскажите пожалуйста, что лучше всего использовать сегодня для сборки? Я знаю про CMake, но не уверен умеет ли он следующее:

  • Самостоятельно поустанавливать флаги вроде -Wall (например pedantic, fail on errors и тому подобное) для gcc и clang
  • Самостоятельно выкачать откуда-нибудь dependencies для сборки, собрать их, положить куда-нибудь в src/build

Или для этого нужен Conan? Или Conan не умеет собирать?

В общем хочется что-то вроде cargo наверное.

Что сейчас самое удобное для новых проектов?

Ответ на: комментарий от fsb4000

Божественная система сборки теперь и на Linux/Mac, а не только на Windows.

Хорошая шутка про MSBuild. Поржал! :)

З.Ы. Мне приходилось много писать на шарпе, если что.

dave ★★★★★
()
Последнее исправление: dave (всего исправлений: 1)
Ответ на: комментарий от RazrFalcon

Ну возможно на первый взгляд это выглядит страшно: https://github.com/roozbehid/dotnet-vcxproj/blob/master/Examples/VcxProj_Complex/ConsoleApplication/ConsoleApplication.vcxproj

Но обычно всё же это генерируется IDE. + в новых версиях довольно сильно упростили, особенно для C#.

Вот минимальный файл проекта:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>

</Project>

Я тут даже не указываю какие файлы собирать, он сам собирает все файлы в той же папке где и файл проекта.

Но можно и указать:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Compile Include="Program.cs" />
  </ItemGroup>

</Project>

А вот так добавлять библиотеки c https://www.nuget.org/:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Compile Include="Program.cs" />
    <Compile Include="SomeClass.cs" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Lib1OnNuget" Version="1.*" />
    <PackageReference Include="Lib2OnNuget" Version="0.1.0" />
  </ItemGroup>

</Project>

Вот с такими примерами уже лучше выглядит система сборки? Или XML не может быть хорошим?

fsb4000 ★★★★★
()
Ответ на: комментарий от fsb4000

Посмотрел на Cargo.toml, посмотрел на vcxproj - перекрестился.

Или XML не может быть хорошим?

XML - неплохой язык разметки. Но он не для людей. Как и json.

PS: он может собирать проекты по ссылке с гитхаба с указанием коммита?

RazrFalcon ★★★★★
()
Ответ на: комментарий от RazrFalcon

json не язык разметки, а «язык» структурирования данных. лучше его придумать что-то текстовое сложно, поскольку он минимален. можно нагородить что-то пропороще, только с отступами(заменив ими скобки), по типу питона, но это уже на любителя.

alysnix ★★★
()
Ответ на: комментарий от RazrFalcon

он может собирать проекты по ссылке с гитхаба с указанием коммита?

нет, только nuget или локальные папки.

можно использовать git submodule, и дальше работать как с локальной зависимостью…

а напрямую нет…

fsb4000 ★★★★★
()
Ответ на: комментарий от RazrFalcon

Я этого и не говорил. Речь о том, что использовать его для конфигов - бред. Там даже комментов нет.

по стандарту - нет. но можно и по стандарту вставить «комменты» в виде просто значений. типа __cm = «это такой коммент» а потом вы можете их игнорить или даже давать пользователю, как некие хинты, хелпы или что-то еще. очень даже удобно

alysnix ★★★
()
Ответ на: комментарий от RazrFalcon

PS: он может собирать проекты по ссылке с гитхаба с указанием коммита?

Вообще-то билд система и менеджер зависимостей это две большие разницы, только в Go додумались скрестить ежа с ужом, причем весьма по идиотски

lovesan ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.