Pomoc z makefile

0

Witajcie,
napisalem make pod program, i program mi sie kompiluje, ale sie nie uruchamia. gdzie jest problem?
Chciałbym, zeby sie uruchamial i pobieral dane z pliku tekst1.txt


all : test1 test2
clean :
    @rm -f *~ zad1  *.ps

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

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

test1 : zad1
    @echo ""
    @echo "Zadanie 1."
    @cat tekst1.txt
    @echo ""
    @./zad1

1

Jeżeli kompiluje się bez problemu to raczej nie ma problemu z makefile. Widzisz jakieś błędy?

0

chodzi o to, że chciałbym wywolac otwarcie sie programu z poziomu make'a. gdy wpisuje w terminalu: make test1 wyskakuje brak reguł do wykonania dla obiektu test1

1
.PHONY: all test1 help 

potem

zad1 : zad-1.c
    @gcc $(CFLAGS) -o $@  $<
Driller12 napisał(a):

Chciałbym, zeby sie uruchamial i pobieral dane z pliku tekst1.txt

./zad1 < tekst1.txt
0

Jedyny problem jaki u mnie się pokazuje to:

make: *** Brak reguł do zrobienia obiektu 'zad-1.c', wymaganego przez 'zad1'. Stop.

No bo rzeczywiście takie coś u Ciebie nie istnieje. Po usunięciu zad-1.c problemu nie ma i program kompiluje się bez problemu.

0

Teraz moj make wyglada tak:

.PHONY: all test1 help

CFLAGS = -Wall

all : test1 test2
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

po komendzie make test1 nadal to samo, sam program mi sie kompiluje normalnie. tylko chce by sie uruchamial

0

a sam program wyglada tak

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

void proc_in_stats();

int main()
{
  printf("Podaj tekst w którym chcesz zliczyć znaki:\n ");
  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.", (char)i, char_count[ i ]);
    }
  }
}


0

uzywajac make'a chce uzyskac:
kompilacje programu(to juz mam)
uruchomienie programu za pomoca make'a
oraz to by pobieram dane z pliku txt

1

Może zacznij pomału.
W main zostaw tylko printf - wtedy będziesz wiedział że program na 100% jest w porządku.
Makefile zrób taki:

all: test1

zad1:
	@gcc -o main.o main.c

test1: zad1
	@./main.o

To powinno skompilować i odpalić ten program.

Wtedy możesz zacząć dodawać do tego makefile i patrzyć czy nadal działa czy też nie.

0

napisalem zwykly hello world i napisalem make taki jak mi podales i nie dziala mi kompilacja ani uruchamianie programu.. ;/

0

Błędów zakładam że nie widzisz żadnych, w takim razie może zejdźmy jeszcze niżej - skompiluj ręcznie i spróbuj uruchomić (jeżeli oczywiście plik będzie istniał):

gcc -Wall -pedantic main.c -o main.o

./main.o
0

tak, gdy zwyczajnie skompiluje i odpale to dziala jak powinien

0

Spróbuj coś takiego:

all:
	gcc -o main.o src/main.c
	./main.o

Choć zakładam że rezultat będzie taki sam co oznacza że problem musi być gdzieś indziej.

0

@Driller12: może i głupie, ale odpal z prawami administratora

0

i jakiej komendy uzyc by to odpalic w make?

0

Zwyczajnie robisz:

sudo make all

i podajesz hasło roota.

0

sorry ale sie zagubilem... :o jakie haslo roota?

0

Jesteś na Linuxie czy Windzie?

0

Linux

0

I nie używałeś nigdy np.

sudo apt-get install...

?

Wtedy podajesz hasło i masz uprawnienia roota (administratora).

0

uzywalem :D juz wiem o co chodzi.. sprry ale jestem po 12 godzinach pracy :| ale nadal to samo ;\

0
Dregorio napisał(a):

@Driller12: może i głupie, ale odpal z prawami administratora

uzywam linuksa i w ustawieniach mam jako administrator..

0

Probowalem teraz odpalic tego starego make'a przez

sudo make test1

ale tez nie dziala..
kompilacja nadal dziala

0

W pliku Makefile wcięcia powinny być wykonane koniecznie tabulatorem a nie zestawem spacji.

0
Mokrowski napisał(a):

W pliku Makefile wcięcia powinny być wykonane koniecznie tabulatorem a nie zestawem spacji.

Niestety nic to nie zmienilo w tym roboczym make'u. w glownym mam wciecia zrobione tabulatorem...

0

ktos ma jeszcze jakis pomysl?

0

all wymaga test2 które jest niezdefiniowane

0
Azarien napisał(a):

all wymaga test2 które jest niezdefiniowane
Niestety to nie pomaga..

0

Ok, to od początku.
Wykonaj

make --version

i podeślij output.
Wykonaj też

gcc --version

i też podeślij output.
A na koniec usuń znaki at (@) na początku komend.
Wykonaj

make

A potem jeszcze na wszelki wypadek:

make --trace

i oczywiście output.
Pomożemy.

0

Spróbuj to wrzucić do programu Geany może masz coś nie tak z kompilatorem GCC.

1 użytkowników online, w tym zalogowanych: 0, gości: 1