Portál AbcLinuxu, 30. dubna 2025 15:25

Makefile statické knihovny v C a QT Creatoru

20.9.2015 11:13 | Přečteno: 1177× | Programování | Výběrový blog | poslední úprava: 20.9.2015 11:13

Až jednou zase budu potřebovat jednoduchou knihovnu v C (ne ++) v QT projektu a zapomenu jak na to...

Adresářová struktura

software/
├── libdfmt
│   ├── include
│   │   └── devices.h
│   ├── libdfmt.a
│   ├── libdfmt.h
│   ├── obj
│   │   ├── devices.o
│   │   └── libdfmt.o
│   └── src
│       ├── devices.c
│       ├── libdfmt.c
│       ├── libdfmt.c.autosave
│       └── makefile
├── libdfmt.config
├── libdfmt.creator
├── libdfmt.creator.user
├── libdfmt.files
├── libdfmt.includes
├── Makefile
├── software.pro
└── software.pro.user

Knihovna libdfmt má .c soubory v src/ .o v obj/ a hlavičky include/ Hlavička s exportovanými funkcemi je a knihovna je v kořeni (složka libdfmt)

Makefile

Makefile jsme se snažil v rámci svých schopností udělat univerzální. jednoduše předpokládá že každému .c v src odpovídá .o v obj. Každý jeden objekt má v prerekvizitách všechny hlavičkové soubory. To sice není ideální, ale vzhledem k rozsáhlosti projektu je to jedno.

IDIR =../include
ODIR=../obj
NAME=libdfmt
CC=gcc
CFLAGS=-Wall -Werror -I$(IDIR) -I/usr/include/libusb-1.0/
LIBS= -lusb-1.0
DEPS = ../libdfmt.h $(wildcard $(IDIR)/*.h)

OBJ = $(patsubst %.c,%.o,$(wildcard *.c))

VPATH = $(ODIR) ../

.PHONY: all
all: static

%.o: %.c $(DEPS)
        mkdir -p $(ODIR)
        $(CC) -c -o $(ODIR)/$@ $< $(CFLAGS)

.PHONY: static
static: $(OBJ)
        ar rsc ../$(NAME).a $(patsubst %, $(ODIR)/%, $(OBJ))

.PHONY: clean
clean:
        rm -vf $(ODIR)/*.o *~ core $(INCDIR)/*~ $(NAME).a

(Odsazování je nutné provádět pomocí tabulátorů nikoliv mezer)

QTcreator

V případě importu projektu s vlastním makefilem je zbytečné vytvářet multiprojekt. V nápovědě k importování projektu se píše, že se creator použije pouze jako editor a kluci vývojářští se toho drží ve smyslu, že takto nevznikne plnohodnotný projekt, který se dá použít jako závislost k jinému (dá se obejít). Nicméně do adresáře s projektem se vám nasáčkuje pár souborů. Proto jsem při importu vybral složku s projektem o úroveň níž.

Soubory:

Aby fungovala buildovací tlačítka creatoru je třeba změnit build directory u projektu na cestu do složky s makefilem (src).Hlavně to upravit u správného projektu.

Pokud současně píšu jak knihovnu tak další projekt, který ji využívá, je dobré v nastavení druhého projektu přidat jako první bod kompilace volání make knihovny.


Kritika (zejména konstruktivní) vítána.
Právo na hrubky, překlepy a absenci čárek vyhrazeno.        

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

20.9.2015 11:45 Mergle
Rozbalit Rozbalit vše Re: Makefile statické knihovny v C a QT Creatoru
Odpovědět | Sbalit | Link | Blokovat | Admin
To je vsechno? To je cely slavny problem? Takoveho programatora tak dostat, ten by letel na hodinu...
FoxVK avatar 20.9.2015 12:02 FoxVK | skóre: 1 | blog: Nora linuxáka
Rozbalit Rozbalit vše Re: Makefile statické knihovny v C a QT Creatoru
A co že ti vlastně vadí ? :D
20.9.2015 17:32 kralyk z abclinuxu | skóre: 29 | blog:
Rozbalit Rozbalit vše Re: Makefile statické knihovny v C a QT Creatoru
Odpovědět | Sbalit | Link | Blokovat | Admin
Osobně bych nasadil CMake a nebabral se s Makefile...
SPD vůbec není proruská
vlastikroot avatar 20.9.2015 18:32 vlastikroot | skóre: 24 | blog: vlastikovo | Milevsko
Rozbalit Rozbalit vše Re: Makefile statické knihovny v C a QT Creatoru
Odpovědět | Sbalit | Link | Blokovat | Admin
V QtCreatoru bych spis ocekaval qmake.
We will destroys the Christian's legion ... and the cross, will be inverted
FoxVK avatar 20.9.2015 19:22 FoxVK | skóre: 1 | blog: Nora linuxáka
Rozbalit Rozbalit vše Re: Makefile statické knihovny v C a QT Creatoru
Tak určitě. Ale tady je cílem udělat knihovnu pro ovládání USB FM tuneru a k tomu demonstrační gui. qmake jsem do ní zatahoval nechtěl.
20.9.2015 20:09 kralyk z abclinuxu | skóre: 29 | blog:
Rozbalit Rozbalit vše Re: Makefile statické knihovny v C a QT Creatoru
No ten cmake by nahradil jak Makefile tak qmake, ale zas na druhou stranu je pravda, že 1) taky má svoje nevýhody a 2) je to závislost (ačkoli to jsou make a qmake taky).
Václav 20.9.2015 20:38 Václav "Darm" Novák | skóre: 26 | blog: Darmovy_kecy | Bechyně / Praha
Rozbalit Rozbalit vše Re: Makefile statické knihovny v C a QT Creatoru
Na stranu druhou, pokud už někdo má ve zvyku kompilovat si na počítači balíčky, pravděpodobně už nejen make, ale i cmake a qmake má. Naopak, make vídám čím dál tím méně.
Cross my heart and hope to fly, stick a cupcake in my eye!
21.9.2015 00:25 chrono
Rozbalit Rozbalit vše Re: Makefile statické knihovny v C a QT Creatoru
Ak má niekto Cmake alebo qmake, tak má, aspoň v Linuxe, na 99% aj make.
Václav 21.9.2015 06:39 Václav "Darm" Novák | skóre: 26 | blog: Darmovy_kecy | Bechyně / Praha
Rozbalit Rozbalit vše Re: Makefile statické knihovny v C a QT Creatoru
Myslel jsem tím čistý make využitý v projektu, poslední dobou je to většinou buď qmake nebo cmake.
Cross my heart and hope to fly, stick a cupcake in my eye!
20.9.2015 20:42 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: Makefile statické knihovny v C a QT Creatoru
Odpovědět | Sbalit | Link | Blokovat | Admin
Pokud současně píšu jak knihovnu tak další projekt, který ji využívá, je dobré v nastavení druhého projektu přidat jako první bod kompilace volání make knihovny.

Především je dobré knihovnu a další projekt zcela oddělit a vydávat a kompilovat samostatně. Pak není třeba řešit, že v jednom chcete Make a v druhém něco klikacího.

16.1.2017 09:57 Hanna
Rozbalit Rozbalit vše Re: Makefile statické knihovny v C a QT Creatoru
Odpovědět | Sbalit | Link | Blokovat | Admin
Very nice post. I just stumbled upon your blog and wanted to say that I have really enjoyed browsing your blog posts 192.168.1.1 192.168.1.1 192.168.1.1 192.168.1.1

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.