Автор Тема: Компилиране на програма за всякакъв вид процесор  (Прочетена 8149 пъти)

task_struct

  • Напреднали
  • *****
  • Публикации: 576
  • Distribution: Kubuntu 14.04
  • Window Manager: KDE 4.13
    • Профил
Еми то наистина ти е отговорено вече  :D Но все пак ще го обясня още веднъж  :)

Първо: Архитектурата на процесора няма нищо общо с броя на ядрата.

Второ: Ако си компилираш програмата за 32битов процесор, независимо дали е АМД или Интел, то тя ще работи на всички 32битови процесори, независимо дали те са Интел или АМД и независимо колко ядра имат. Същото важи и за 64битовите процесори. Ако 64битова система поддържа емулация на 32битови инструкции, то и 32битовата версия ще върви на нея.

Трето: Една програма може да се възползва от многото ядра на процесора само ако диспечърът на процесите на операционната система поддържа многоядрен режим и програмата има поне 2 нишки. Като ОС-а решава дали да пусне нишките на отделни ядра или на едно. Това зависи от натоварването на системата, алгоритмите заложени в диспечъра на процесите и още доста неща и програмистът не може да направи нищо по въпроса. Така че на многоядрен процесор нямаш гаранция,че програмата ще върби по-бързо, даже може да е по-бавна заради заключване на данни от страна на една от нишките.

Надявам се този път да съм бил точен :)

П.П Под Интел/АМД разбирам всеки x86/x86_64 процесор
Активен

"Minds are like parachutes. They only function when they are open." - James Dewar

irc.freenode.net  / #linux-bg

LinuxFanUNIX

  • Напреднали
  • *****
  • Публикации: 408
  • Distribution: Slackware 12.2
  • Window Manager: KDE 3.5.10
    • Профил
Благодаря за пълния и изчерпателен отговор! Да си жив и здрав!  [_]3

Имам само един въпрос... За да не отварям нова тема, бихте ли ми казали как мога да настроя функцията make install да не инсталира в оригиналните директории които са му зададени, а в определена от мен...

Пример:

Ако make install копира файловете в /usr,  /etc, и аз задам примерно /tmp/ като определена от мен директория, файловете ДА НЕ отиват както е определено в /usr,  /etc, а в /tmp/usr/, /tmp/etc...

Надявам се сте ме разбрали...

Благодаря предварително!
Активен

task_struct

  • Напреднали
  • *****
  • Публикации: 576
  • Distribution: Kubuntu 14.04
  • Window Manager: KDE 4.13
    • Профил
Ако компилираш с ./configure, make и make install. Напиши ./configure --prefix=/tmp
Aко е със cmake тогава: cmake .. -DCMAKE_INSTALL_PREFIX=/tmp
Активен

"Minds are like parachutes. They only function when they are open." - James Dewar

irc.freenode.net  / #linux-bg

LinuxFanUNIX

  • Напреднали
  • *****
  • Публикации: 408
  • Distribution: Slackware 12.2
  • Window Manager: KDE 3.5.10
    • Профил
Ако компилираш с ./configure, make и make install. Напиши ./configure --prefix=/tmp
Aко е със cmake тогава: cmake .. -DCMAKE_INSTALL_PREFIX=/tmp
В случая имам само make файл...  :(
Активен

task_struct

  • Напреднали
  • *****
  • Публикации: 576
  • Distribution: Kubuntu 14.04
  • Window Manager: KDE 4.13
    • Профил
Ами тогава има 2 начина:

1) Отваряш Makefile-а и търсиш реда "install:" Под него са описани командите който да се изпълнят за инсталация. И си ги редактираш.

2) Правиш си отделен "раздел" във Makefile-а примерно "test:" и там си пишеш командите за тестова инсталация в /tmp и после иснталираш с make test

Успех  [_]3
Активен

"Minds are like parachutes. They only function when they are open." - James Dewar

irc.freenode.net  / #linux-bg

LinuxFanUNIX

  • Напреднали
  • *****
  • Публикации: 408
  • Distribution: Slackware 12.2
  • Window Manager: KDE 3.5.10
    • Профил
Ами тогава има 2 начина:

1) Отваряш Makefile-а и търсиш реда "install:" Под него са описани командите който да се изпълнят за инсталация. И си ги редактираш.

2) Правиш си отделен "раздел" във Makefile-а примерно "test:" и там си пишеш командите за тестова инсталация в /tmp и после иснталираш с make test

Успех  [_]3
А няма ли нещо по-автоматизирано, като случая с ./configure-то, защото като започнах проекта си, не мислех че изобщо ще го прекомпилирам, и си милех че ще е само сорс и го ударих на създаване на много папки, всяка със Makefile, и ако трябва да правя това ръчно - просто ще ме заболи клавиатурата на 500 папки и Makefiles... :)

Та, няма ли нещо по-автоматизирано, като ./configure --prefix=/tmp...

Благодаря за бързите отговори!  ;)
Активен

task_struct

  • Напреднали
  • *****
  • Публикации: 576
  • Distribution: Kubuntu 14.04
  • Window Manager: KDE 4.13
    • Профил
Aми доколкото разбирам сам си пишеш Makefile-овете, а не ги генерираш. Така, че няма друг вариант. Освен да си направиш една променлива в Makefile-а, която да указва пътя за инсталация и да си я сменяш само нея. Така ще се сменя 1 ред :) Друг вариант е тази променлива да се подава като опция на make. Вмомента няма откъде да погледна как точно ставаше, но виж make --help .

Иначе, за проект над 10ина файла ти препоръчвам да си направиш автоматизирано генериране на Makefile-овете. Така ще имаш и автоматично намиране на необходимите библиотеки, защото при ръчно написаните, ти разчиташ, че потребителят, при който си компилира програмата, има инсталирани всички нужни инструменти и библиотеки, което доста често не е така. Cmake е доста добър избор, също така ако пишеш на Qt може да използваш неговите инструменти - qmake :)
« Последна редакция: Jan 19, 2009, 08:33 от task_struct »
Активен

"Minds are like parachutes. They only function when they are open." - James Dewar

irc.freenode.net  / #linux-bg

LinuxFanUNIX

  • Напреднали
  • *****
  • Публикации: 408
  • Distribution: Slackware 12.2
  • Window Manager: KDE 3.5.10
    • Профил
Ми при мен въпросът стои така:

Многобройни папки, съдържащи C++, Qt4, GTK и почти всичко съм генерирал автоматично... Т.е. за Qt4 - qmake, C++ - генерирани от KDevelop и т.н.

Абе пълна смесица...  :(

А иначе даже и аз не знам изходните файлове, само make си знае работата...
Активен

task_struct

  • Напреднали
  • *****
  • Публикации: 576
  • Distribution: Kubuntu 14.04
  • Window Manager: KDE 4.13
    • Профил
Туй немога да си го представя  ???  :( Но ми прилича на няколко проекта, който, нз как, се линкават заедно  :o
Активен

"Minds are like parachutes. They only function when they are open." - James Dewar

irc.freenode.net  / #linux-bg

LinuxFanUNIX

  • Напреднали
  • *****
  • Публикации: 408
  • Distribution: Slackware 12.2
  • Window Manager: KDE 3.5.10
    • Профил
Туй немога да си го представя  ???  :( Но ми прилича на няколко проекта, който, нз как, се линкават заедно  :o
Ми всяка програмка е в различна папка и това е един общ проект...

Иначе ето как се линква всичко:

В един install script писан на sh съм написал нещо от рода:
for programfolder in `ls pwd`
do
      cd $programfolder && make  && make install && cd ..
done
« Последна редакция: Jan 22, 2009, 20:06 от LinuxFanUNIX »
Активен

LinuxFanUNIX

  • Напреднали
  • *****
  • Публикации: 408
  • Distribution: Slackware 12.2
  • Window Manager: KDE 3.5.10
    • Профил
Някакви предложения...?
Активен

tarator

  • Напреднали
  • *****
  • Публикации: 849
    • Профил
Досега десет пъти да си променил Makefile-овете, вместо да чакаш на някой.
Активен

A gentleman is one who is never rude unintentionally. - Noel Coward

LinuxFanUNIX

  • Напреднали
  • *****
  • Публикации: 408
  • Distribution: Slackware 12.2
  • Window Manager: KDE 3.5.10
    • Профил
Досега десет пъти да си променил Makefile-овете, вместо да чакаш на някой.
500 Makefile-а едва ли ще имам възможност да ги променя... пък и все пак това трябва да стане ръчно, не да си драсна скрипт който да ми ги въведе (както правя за повечето си неща които чакам автоматично да ми се изпълнят... чрез скрипт)...
Активен

tarator

  • Напреднали
  • *****
  • Публикации: 849
    • Профил
Ако имаш 500 Makefile-a значи не си мислил като си правил приложението. За сравнение, ядрото на Линукс има 1000 Makefile-a при 25 хиляди файла общо. Защо ли ми се струва, че твоят проект няма 12 хиляди файла ;)
« Последна редакция: Jan 23, 2009, 00:34 от tarator »
Активен

A gentleman is one who is never rude unintentionally. - Noel Coward

LinuxFanUNIX

  • Напреднали
  • *****
  • Публикации: 408
  • Distribution: Slackware 12.2
  • Window Manager: KDE 3.5.10
    • Профил
Ако имаш 500 Makefile-a значи не си мислил като си правил приложението.
Ми първоначално щеше да бъде проект само с един файл, след което си добавих и още 10 папки, след което се сетих че само на това не може да се каже проект и започнах да пиша, да пиша, да пиша... и така до около 500 папки съдържащи Sources и Makefiles...

Иначе отначало си мислех че като го пускам ще е само от сорс, и че 2-3 минути компилация няма да забави никого, но сега нещата не стоят така...  ;D
Активен