Pomoc z makefile

D1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 40
0

make :

Kopiuj
GNU Make 3.81
Copyright (C) 2006  Free Software Foundation, Inc.
Ten program jest darmowy; warunki kopiowania są opisane w źródłach.
Autorzy nie dają ŻADNYCH gwarancji, w tym nawet gwarancji SPRZEDAWALNOŚCI
lub PRZYDATNOŚCI DO KONKRETNYCH CELÓW.

Ten program został zbudowany dla i686-pc-linux-gnu

gcc:

Kopiuj
przemek@przemek-Virtual-Machine:~/Pulpit/ss$ gcc --version
gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

trace:

Kopiuj
przemek@przemek-Virtual-Machine:~/Pulpit/ss$ make --trace
make: nieznana opcja '--trace'
Składnia: make [opcje] [obiekt] ...
Opcje:
  -b, -m                      Ignorowane dla kompatybilności.
  -B, --always-make           Bezwarunkowe utworzenie wszystkich obiektów.
  -C KATALOG, --directory=KATALOG
                              Przejście do KATALOGu przed robieniem
                              czegokolwiek.
  -d                          Wyświetla dużo informacji diagnostycznych.
  --debug[=FLAGI]             Wyświetla różne rodzaje informacji
                              diagnostycznych.
  -e, --environment-overrides
                              Zmienne środowiska przykrywają makefile.
  -f PLIK, --file=PLIK, --makefile=PLIK
                              Czyta PLIK jako makefile.
  -h, --help                  Wyświetla ten komunikat i kończy działanie.
  -i, --ignore-errors         Ignoruje błędy poleceń.
  -I KATALOG, --include-dir=KATALOG
                              Szuka dołączanych makefile w KATALOGu.
  -j [N], --jobs[=N]          Dopuszcza N zadań naraz; brak N oznacza brak
                              ograniczeń.
  -k, --keep-going            Kontynuuj jeśli nie da się zrobić jakichś
                              obiektów.
  -l [N], --load-average[=N], --max-load[=N]
                              Nie uruchamiaj wielu zadań jeśli load nie jest
                              poniżej N.
  -L, --check-symlink-times   Używanie ostatniego mtime między dowiązaniem a celem.
  -n, --just-print, --dry-run, --recon
                              Nie wykonuje poleceń; jedynie je wyświetla.
  -o PLIK, --old-file=PLIK, --assume-old=PLIK
                              Uznanie PLIKu za bardzo stary i nie tworzenie go
                              ponownie.
  -p, --print-data-base       Wyświetla wewnętrzną bazę danych make.
  -q, --question              Nie uruchamia żadnych poleceń; status powrotu
                              wskazuje aktualność.
  -r, --no-builtin-rules      Wyłącza wbudowane reguły standardowe.
  -R, --no-builtin-variables  Wyłącza ustawianie wbudowanych zmiennych.
  -s, --silent, --quiet       Nie wypisuje poleceń.
  -S, --no-keep-going, --stop
                              Wyłącza -k.
  -t, --touch                 Uaktualnia obiekty zamiast je robić.
  -v, --version               Wyświetla wersję make i kończy działanie.
  -w, --print-directory       Wyświetla aktualny katalog.
  --no-print-directory        Wyłącza -w, nawet jeśli było ono włączone
                              domyślnie.
  -W PLIK, --what-if=PLIK, --new-file=PLIK, --assume-new=PLIK
                              Uznaje PLIK za nieskończenie nowy.
  --warn-undefined-variables  Ostrzega przy odwołaniach do niezdefiniowanych
                              zmiennych.

Ten program został zbudowany dla i686-pc-linux-gnu


  • Rejestracja: dni
  • Ostatnio: dni
0

Stary system, stare make. Ale damy radę. Jak wywaliłeś te małpy to wykonaj make i wrzuć output.
Wklej aktualną wersje pliku Makefile.

  • Rejestracja: dni
  • Ostatnio: dni
0

aha, po

Kopiuj
all: test1

daj pustą linię.

  • Rejestracja: dni
  • Ostatnio: dni
1

Ogólnie reguły muszą być oddzielone pustą linią. Nie może być tak, że jest to linia zawierająca białe znaki. Sprawdź.

D1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 40
0

moj make wyglada tak:

Kopiuj
.PHONY: all test1 help

CFLAGS = -Wall

all : test1

clean :
    rm -f *~ zad1 zad2 *.ps

help :
    @echo ""
    @echo "Dostepne opcje: all, clean,"
    @echo "  zad1, zad2,  sito,"
    @echo "  test1, test2,"
    @echo ""

zad1 : zad1.c
    gcc $(CFLAGS) -o $@ $<


test1 : zad1
    @echo ""
    @echo "zad1"
    @cat tekst1.txt
    @echo ""
    @./zad1 < tekst1.txt


D1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 40
0

wycinek z konsoli:

Kopiuj
przemek@przemek-Virtual-Machine:~$ cd Pulpit
przemek@przemek-Virtual-Machine:~/Pulpit$ cd ss
przemek@przemek-Virtual-Machine:~/Pulpit/ss$ make all
make: *** Brak reguł do wykonania obiektu `all'. Stop.
przemek@przemek-Virtual-Machine:~/Pulpit/ss$ make zad1
cc     zad1.c   -o zad1
przemek@przemek-Virtual-Machine:~/Pulpit/ss$ make test1
make: *** Brak reguł do wykonania obiektu `test1'. Stop.
przemek@przemek-Virtual-Machine:~/Pulpit/ss$

  • Rejestracja: dni
  • Ostatnio: dni
1

Coś jest nie tak.
Powinno być:

Kopiuj
gcc -Wall -o zad1 zad1.c

a jest:

Kopiuj
cc zad1.c -o zad1.

Na pewno twój plik nazywa się Makefile? Wielkość liter ma znaczenie.
Ewentualnie możesz spróbować:

Kopiuj
make -f [nazwa pliku makefile] [target]

Gdzie nazwę pliku podstaw taką jak masz, a target to albo all albo test1.

D1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 40
0
Czarny Rycerz napisał(a):

Coś jest nie tak.
Powinno być:

Kopiuj
gcc -Wall -o zad1 zad1.c

a jest:

Kopiuj
cc zad1.c -o zad1.

Na pewno twój plik nazywa się Makefile? Wielkość liter ma znaczenie.
Ewentualnie możesz spróbować:

Kopiuj
make -f [nazwa pliku makefile] [target]

Gdzie nazwę pliku podstaw taką jak masz, a target to albo all albo test1.

moja nazwa pliku to byl po prostu 'make' ...... po zmianie wszystko dziala tak jak chce, czyli program sie wlacza i pobiera tekst z pliku.. dzieki ;)

  • Rejestracja: dni
  • Ostatnio: dni
1

Czarny Rycerz poleca się na przyszłość :)

D1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 40
0
Czarny Rycerz napisał(a):

Czarny Rycerz poleca się na przyszłość :)

mozesz zerknac co jest nie tak z tym kodem?

Kopiuj
#include <stdio.h>
#include <string.h>

void proc_in_stats();

int main()
{
 
  proc_in_stats();

  return 0;
}

void proc_in_stats()
{
  int char_count[ 128 ] = { 0 };
  char buff[ 64 ];
  int rv = 0;
  int i;
  size_t j, len;
  for( i = 0 ; i < 5 ; i += 1 ) {
    rv = scanf( "%s", buff );
    if( rv <= 0 ) {
      return;
    }
    else {
      len = strlen( buff );
      for( j = 0 ; j < len ; j += 1 ) {
        char_count[ (int)buff[ j ] ] += 1;
      }
    }
  }
  for( i = 0 ; i < 128 ; i += 1 ) {
    if( char_count[ i ] > 0 ) {
      printf( "\nZnak '%c' w Twoim tekscie wpisales %d razy.\n", (char)i, char_count[ i ]);
    }
  }
}

nie zlicza mi wszystkich znakow w podanym tekscie i nie wiem dlaczego

atmal
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 913
0

Możesz podać przykładowy tekst w którym nie zlicza Ci znaków?
U mnie dla takiego wejścia:

Kopiuj
Hello Hello World World World

Wyświetla

Kopiuj
Znak 'H' w Twoim tekscie wpisales 2 razy.

Znak 'W' w Twoim tekscie wpisales 3 razy.

Znak 'd' w Twoim tekscie wpisales 3 razy.

Znak 'e' w Twoim tekscie wpisales 2 razy.

Znak 'l' w Twoim tekscie wpisales 7 razy.

Znak 'o' w Twoim tekscie wpisales 5 razy.

Znak 'r' w Twoim tekscie wpisales 3 razy.

Więc wszystko się zgadza.

D1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 40
0

np nie liczy 't'

Kopiuj
przemek@przemek-Virtual-Machine:~/Pulpit/ss$ make test1

zad4
Kazda linie zrodla bardzo dobrze znam!
Jak sa jakies bledy to je poprawiam.
Zanim wysle program, czasu mija wiele,
Bywa tak, ze pisze nawet i w niedziele.

Znak 'K' w Twoim tekscie wpisales 1 razy.

Znak 'a' w Twoim tekscie wpisales 4 razy.

Znak 'b' w Twoim tekscie wpisales 2 razy.

Znak 'd' w Twoim tekscie wpisales 4 razy.

Znak 'e' w Twoim tekscie wpisales 2 razy.

Znak 'i' w Twoim tekscie wpisales 2 razy.

Znak 'l' w Twoim tekscie wpisales 2 razy.

Znak 'n' w Twoim tekscie wpisales 1 razy.

Znak 'o' w Twoim tekscie wpisales 3 razy.

Znak 'r' w Twoim tekscie wpisales 3 razy.

Znak 'z' w Twoim tekscie wpisales 4 razy.
przemek@przemek-Virtual-Machine:~/Pulpit/ss$

atmal
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 913
1

scanf(%s) będzie czytał tylko jeden wyraz, więc z tych 4 linijek zostanie przeczytane tylko:

Kopiuj
Kazda linie zrodla bardzo dobrze

Bo taką masz pętlę:

Kopiuj
for (i = 0; i < 5; i += 1) { ... }
D1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 40
0
atmal napisał(a):

scanf(%s) będzie czytał tylko jeden wyraz, więc z tych 4 linijek zostanie przeczytane tylko:

Kopiuj
Kazda linie zrodla bardzo dobrze

Bo taką masz pętlę:

Kopiuj
for (i = 0; i < 5; i += 1) { ... }

zmienilem i<5 na i<20 i smiga ;) dzieki

atmal
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 913
1

Możesz, ale wtedy musisz znać ilość wyrazów, więc lepiej zrobić taką pętlę zamiast for:

Kopiuj
while(scanf("%63s", buff) != EOF) // Czyta 63 znaki (64 znak jest dla \0) do bufora
{
    len = strlen(buff);
    for (j = 0; j < len; j += 1)
    {
        char_count[(int)buff[j]] += 1;
    }
}

EOF na Linuxie możesz w terminalu zrobić poprzez CTRL+D.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.