Portál AbcLinuxu, 11. května 2025 04:27
Mam problemy s nasledujicim Makefile.am:
bin_PROGRAMS = darkbat.bin bin_SCRIPTS = darkbat darkbat_bin_SOURCES = dark.f90 darkbat.f90 darkbat_bin_LDADD = -L$(top_srcdir)/lib -L../lib -lmunipack
Po korektnin vygenerovani pod autoconf259/automake19 me to na systemu, kde to generuju pracuje sprave avsak po preneseni jinam to to krachne na prikazu, ktery vubec nema udelat:
gcc darkbat.o -o darkbat
Vypada to, jako by to bylo zmateno z jine koncovky pro binarky. Darkbat je shellovej script, ktery vola prave binarku darkbat.bin. Nedari se me nijak najit reseni, jak to obejit.
To jsou jen ruzne kosmeticke upravy. Na funkcnost to nemuze mit vliv.
Po velkem laborovani jsem nakonec prisel na to, ze pravdepodobne se pouzije implicitni pravidlo na buildovani darkbat i kdyz je to script. Nechapu proc. Nakonec pomohl tenhle figl:
bin_PROGRAMS = darkbat.bin dist_bin_SCRIPTS = darkbat darkbat_bin_SOURCES = dark.f90 darkbat.f90 darkbat_bin_LDADD = -L$(top_srcdir)/lib -L../lib -lmunipack darkbat: echo
$ head foo foo.c bar.c Makefile.am ==> foo <== #!/bin/sh echo "Ja jsem foo" ==> foo.c <== #include <stdio.h> void bar(void); int main(void) { puts("Ja jsem " __FILE__); bar(); } ==> bar.c <== #include <stdio.h> void bar(void) { puts("Ja jsem " __FILE__); } ==> Makefile.am <== bin_PROGRAMS = foobar foobar_SOURCES = foo.c bar.c bin_SCRIPTS = foo $ make make all-am make[1]: Entering directory `/home/michal/tmp/pok' if gcc ... -c -o foo.o foo.c; \ then mv -f ".deps/foo.Tpo" ".deps/foo.Po"; else rm -f ".deps/foo.Tpo"; exit 1; fi if gcc ... -c -o bar.o bar.c; \ then mv -f ".deps/bar.Tpo" ".deps/bar.Po"; else rm -f ".deps/bar.Tpo"; exit 1; fi gcc -g -O2 -o foobar foo.o bar.o make[1]: Leaving directory `/home/michal/tmp/pok' # to bylo jeste OK $ touch foo.c $ make make all-am make[1]: Entering directory `/home/michal/tmp/pok' if gcc ... -c -o foo.o foo.c; \ then mv -f ".deps/foo.Tpo" ".deps/foo.Po"; else rm -f ".deps/foo.Tpo"; exit 1; fi gcc -g -O2 -o foobar foo.o bar.o gcc -g -O2 foo.c -o foo /tmp/ccEt2cj5.o(.text+0x17): In function `main': /home/michal/tmp/pok/foo.c:8: undefined reference to `bar' collect2: ld returned 1 exit status make[1]: *** [foo] Error 1 make[1]: Leaving directory `/home/michal/tmp/pok' make: *** [all] Error 2 # tady uz zauradovala implicitni rula make a prepsala mi ten skript...
darkbat: touch $@
darkbat: touch $@Toto je možná špatně mne špatně. Zkuste:
mkdir build cd build ../configure make make installPokud se nemýlím, tak to nainstaluje prázdný soubor darkbat.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.