LINUX.ORG.RU

C++ и Meson

 , ,


0

3

Решил попробовать осилить C++, ну и Cargo как в расте там нету, так что просто использовал Makefile, но затем захотелось заиспользовать модный Meson, но не понятно как мне header файлы там прикреплять, может кто подскажет?

Makefile:

all: main

main: vec source/main.cpp
	g++ -o main vec2.o source/main.cpp -I source/

vec: source/vec2.cpp
	g++ -c -o vec2.o source/vec2.cpp -I source/


И вот как я пытался написать meson.build
project('learing cpp', 'cpp')
src = ['source/vec2.cpp','source/main.cpp']
#executable('main', sources: src, cpp_pch: ['includes/vec2.h','includes/vec2.cpp'])
gen_src = custom_target('gen',
                        input:['source/includes/vec2.cpp'],
                        output: ['vec2.o'],
                        command:['']
)
executable('main','source/main.cpp',gen_src,cpp_pch: 'source/includes/vec2.h')[/cmake]

★★

Лучше осваивай Haskell. Там Stack есть как аналог Cargo.

Virtuos86 ★★★★★ ()

Зачем начинать изучать с билд системы? Лишняя трата времени, только порог вхождения себе повышаешь.
Например в webdev без билд системы никак не обойтись с самого начала, она отвечает за управления зависимостями и hot reload во время разработки, чтоб тыкать результата в броузере сразу после правки кода.
В жабе билд система отвечает только за менеджмент зависимостей, чтоб не копировать jar'ы из интернетов, за все остальные фичи отвечает IDE. А в Cях?! Билд система нужна когда уже сложно собрать проект без нее и когда проект нужно распространять, т.е. если не красногазить с vi а скажем использовать vscode то просто сделать лаунчеры попутно разобравшись с CLI для gcc или clang'а. Но это все мое ИМХО.

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

Автодополнение для C/C++ в VSCode ломается на примитивных вещах, так что ито все нинужно. Meson довольно простой, его понять можно за пару минут, почему бы и нет. А плюсы в том что он удобнее и быстрее make, bash, в этом можно убедится просто посмотрев примеры.

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

А плюсы в том что он удобнее и быстрее make, bash

Когда нечего хорошего сказать про систему сборки, говорят, что она быстрая.

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

удобнее

Не надо думать как где называется библиотека и где она находится, работает везде, linux, openbsd, etc.

быстрая

Там вроде многопоточность, и полюбому быстрее примитивных башскриптов.

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

Там вроде многопоточность

make -j

полюбому быстрее примитивных башскриптов.

«Примитивными башскриптами» собираются разве что однофайловые программы, а там «многопоточность» не поможет.

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

Ахах, лел, может стоило остановится? Ты для чего споришь? Просто потому что можешь?

«Примитивными башскриптами» собираются разве что однофайловые программы, а там «многопоточность» не поможет.

Конечно, конечно, может ты просто слишком упертый? Я сначала подумал что у тебя на аватарке барашек Есть много проектов которые используют шелскрипты для сборки, ты еще с этим поспорь, лол.

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

Ахах, лел, может стоило остановится?

Может, не стоило тебе начинать про скорость?

«Примитивными башскриптами» собираются разве что однофайловые программы, а там «многопоточность» не поможет.

Конечно, конечно, может ты просто слишком упертый?

Нет, у меня просто опыта больше.

Есть много проектов которые используют шелскрипты для сборки, ты еще с этим поспорь, лол.

Ну, приведи Топ10 этих проектов.

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

Meson довольно простой

Это может для тебя очередная система сборки довольно простая, когда есть куча пластов знаний еще один тонкий слой абстракций освоить просто. А тут человек сказал что хочет изучить не систему сборки а c++. А я скажу как будет, он закопается в изучение сборки, интеграцию с редактором/иде, через пару дней выгорит и кроме собираемого hello world у него не будет ничего. Вернется к изучению сей через пол года, контекст весь забудет, прочитает про систему сборки Х и начнет все с начала, чтоб «теперь уже правильно». А правильно нужно начинать с кода и кодить много, а потом решить проблемы по мере накопления. Заранее выбирать «правильный подход» в новой теме, без компетенций знаний и навыков, дело глупое и путь в карго культ. Карго культ кстати это когда человек знает как делать правильно, а почему не знает, и такой «спец» в любой сложной ситуации решения предложить не сможет.

anonymous ()
Ответ на: комментарий от tailgunner

make -j

make -jX значительно проигрывает в скорости параллельной сборки тому же Ninja. И помнится, в своё время Qt-разрабы даже пилили собственный аналог make — jom, чтобы решить убогую тормознутость make -jX.

http://david.rothlis.net/ninja-benchmark/

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

Автодополнение для C/C++ в VSCode ломается на примитивных вещах, так что ито все нинужно

В обычной MS Visual Studio оно на элементарных вещах не ломается, а VS Code это тупо хипстерская поделка, там это автодополнение С/С++ небось на JavaScript'ах реализовано.

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

make -jX значительно проигрывает в скорости параллельной сборки тому же Ninja

http://david.rothlis.net/ninja-benchmark/

For a project with 1,000 programs built from 10,000 C files and 10,000 header files, there is no significant difference in the duration of a fresh build.

Просто с треском проигрывает.

For a much larger project (10,000 programs, 100,000 C files and 100,000 header files) there is a significant difference in a no-op build: 73s for Make versus 1.5s for Ninja.

Окей, окей, ninja - это webscale. Для no-op build.

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

Может, не стоило тебе начинать про скорость?

Окей, показывай замеры где bash скрипты быстрее, профессионал.

Нет, у меня просто опыта больше.

Видно что не во всем, лол.

Ну, приведи Топ10 этих проектов.

Научу профессионала ловить рыбу, google -> github build.sh. Ну например из современного Nim, еще много библиотек встречал, но я обычно прописываю apt-get install и не парюсь, поэтому забыл уже.

linuhs_user ()
Ответ на: комментарий от tailgunner

Нет, у меня просто опыта больше.

Но не обязательно доставать его из штанов на публике

Deleted ()
Ответ на: комментарий от anonymous

Это может для тебя очередная система сборки довольно простая

Я только ее и знаю, вот тебе пример:

project('tutorial', 'c')
sdl2_dep = dependency('SDL2')
curl_dep = dependency('libcurl')
executable('demo', ['main.c', 'read.c'], dependencies: [sdl2_dep, curl_dep])
По мне так очень легко, сложнее заучить странные ls, echo, итд.

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

сложнее заучить странные ls, echo, итд.

Это не нужно, на самом деле. dependency в meson — всего лишь обращение к pkg-config. То же самое можно написать и в Makefile. Правда, наличие зависимостей, конечно, придётся проверять руками

Deleted ()
Ответ на: комментарий от EXL

Ну с обычной визуалкой у меня все окей было, я знаю что Visual Code это форк атома, но речь то именно про VSCode была.

linuhs_user ()
Ответ на: комментарий от Deleted

Ну там много чего еще есть. А pkg-config не всегда используется же, плюс часто под пакеты нет файлов с описанием, или у них другое название.

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

А pkg-config не всегда используется же

Насколько мне известно, в meson — всегда

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

Ну видимо я напутал что то, но названия там приведенны к нормальному виду во всяком случае, в отличие от обычного pkg-config)

[root:~] pkg-config --libs sdl2 
-pthread -lSDL2
[root:~] pkg-config --libs sdl2_image
Package sdl2_image was not found in the pkg-config search path.
Perhaps you should add the directory containing `sdl2_image.pc' to the PKG_CONFIG_PATH environment variable
No package 'sdl2_image' found
[root:~] pkg-config --libs SDL2_image 
-lSDL2_image -pthread -lSDL2

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

Научу профессионала ловить рыбу

Не научишь. С другой стороны, профессионал тоже тебя ничему не научит - кому охота учить самоуверенного подростка.

google -> github build.sh

Иии... видим скрипт на Python: https://github.com/wunderio/build.sh/blob/master/build.sh И что ты хотел сказать этим?

Ну например из современного Nim

«The `koch`:idx: program is Nim's maintenance script. It is a replacement for make and shell scripting with the advantage that it is much more portable.» Написан koch. внезапно, на Nim.

еще много библиотек встречал [...] забыл уже.

Ясно.

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

Не научишь.
Иии... видим скрипт на Python

Ну и цирк.

«The `koch`...»

Скачай Nim архивом.

Ясно.

Их нету, да, ведь даже гугл профессионал не освоил, лел.

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

google -> github build.sh

Иии... видим скрипт на Python: https://github.com/wunderio/build.sh/blob/master/build.sh И что ты хотел сказать этим?

Ну и цирк.

Так что ты сказать-то хотел?

«The `koch`...»

Скачай Nim архивом.

Зачем? Ну, будет там автосгенерированный build.sh, и что?

еще много библиотек встречал [...] забыл уже.

Ясно.

Их нету, да, ведь даже гугл профессионал не освоил, лел.

А у тебя вообще когда-нибудь получалось заставить оппонента гуглить доказательства твоей правоты? И не получится.

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

Так что ты сказать-то хотел?

Что ты гуглом пользоваться не умеешь, очевидно же.

Зачем? Ну, будет там автосгенерированный build.sh, и что?

А, ну ты уже даже забыл о чем разговор, лол.

А у тебя вообще когда-нибудь получалось заставить оппонента гуглить доказательства твоей правоты?

Да.)) Есть люди у которых на первом месте не «я должен быть прав!»

И не получится.

Ага, окей, ты свое ЧСВ хочешь повысить или что? Самопровозглашение себя профессионалом уже не радует? Наверное это от проблем в жизни, лучшеб решал их вместо вот этого всего. Я тебе даже помогу, отвечать на твои комментари больше не буду, можешь сходить пока к психологу или ченить такое.

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

Так что ты сказать-то хотел?

Что ты гуглом пользоваться не умеешь, очевидно же.

Если учесть, что я просто вбил в гугл ключевые слова, которые ты дал, это гуглом не умеешь пользоваться ты.

Зачем? Ну, будет там автосгенерированный build.sh, и что?

А, ну ты уже даже забыл о чем разговор, лол.

Я помню, что речь шла о проектах, собираемых шелл-скриптами. А тут оказывается, что в проекте Nim используется собственная система сборки, а шелл скрипт генерят для релиза и кладут только в релизный тарбол.

ты свое ЧСВ хочешь повысить или что?

Ни повысить, ни понизить ЧСВ спором с тобой невозможно. Я хотел по-легкому узнать список проектов, которые для сборки используют шелл-скрипты, но не получилось. Ну и ладно.

tailgunner ★★★★★ ()

Если ты еще только C++ начал изучать, то не проще просто g++ helloworld.cxx -o helloworld делать?

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

Я учу C++ по книге «Как программировать на C++» и там сразу же в 3 главе начинают использовать структуры и появляется надобность в создании header файл

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