[Makefile] Petite question sur ./configure(Résolu)

Mise à jour / Création /debug de paquetages
Avatar de l’utilisateur
Maximilien LIX
yeomen
Messages : 211
Inscription : mer. 23 avr. 2014, 14:27

[Makefile] Petite question sur ./configure(Résolu)

Message par Maximilien LIX »

Hello world !
J'aimerais m'intéresser, dans le cadre de la création d'un PKGBUILD, à la création d'un Makefile pour un mini-projet 100% en langage C. Selon ce que j'ai pu voir sur le web, j'ai fait le Makefile ci-dessous:

Code : Tout sélectionner

CC=gcc
CFLAGS=-W -Wall
_SRC_DIR=./src
EXEC=./bin/probuild
INC=$(_SRC_DIR)/include/header.h
SRC=$(_SRC_DIR)/argument_control.c $(_SRC_DIR)/detect_file.c $(_SRC_DIR)/detect_extension.c $(_SRC_DIR)/decoding_extension.c $(_SRC_DIR)/detect_sdl.c $(_SRC_DIR)/detect_sdl_image.c $(_SRC_DIR)/detect_gtk.c $(_SRC_DIR)/detect_libmax.c $(_SRC_DIR)/decoding_library.c $(_SRC_DIR)/build_script.c $(_SRC_DIR)/run_script.c $(_SRC_DIR)/main.c
OBJ=$(SRC:.c=.o)
TARGETDIR=/usr/bin/

MKREP=@mkdir $(TARGETDIR)
MKLAW=@chmod u=rwx

all: $(EXEC)

$(EXEC): $(OBJ)
	$(CC) -o $@ $^ $(LDFLAGS)
	$(MKLAW) $@

%.o: %.c $(INC)
	$(CC) -o $@ -c $< $(CFLAGS)


.PHONY: clean mrproper

clean:
	rm -rf src/*.o

mrproper: clean
	rm -rf $(EXEC)

install:
	$(MKREP)
	cp $(EXEC) $(TARGETDIR)                             
Ma question est la suivante, comment je fais pour la commande configure ? (le truc qui vérifie que toutes les dépendances sont satisfaites pour la compilation) vu que même si mon programme n'utilise que des fonctions standards, j'imagine que par convention, ./configure --prefix=/usr devra apparaître dans le PKGBUILD.
Dois-je créer un fichier spécifique ?

Oh et par ailleurs, si dans le PKGBUILD je mets:

Code : Tout sélectionner

make DESTDIR="$pkgdir" install
j'aurais bien dans $pkgdir les répertoires /usr/bin et ce qui sera à l'intérieur (mon programme) sera installé dans le répertoire /usr/bin ? (oups ça fait plusieurs questions là :mrgreen: )

Merci de bien vouloir éclairer ma lanterne, cordialement. :D
Dernière modification par Maximilien LIX le ven. 04 sept. 2015, 19:07, modifié 1 fois.
Linuxien et blogueur en carton
Acer AX3810 (Archlinux & Debian)
Acer Aspire V5 (ubuntu-Mate)
Lenovo Thinkpad Edge E330 (Archlinux)
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17186
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [Makefile] Petite question sur ./configure

Message par benjarobin »

Je te déconseille vivement de te plonger dans les outils autotools et donc d'utiliser un ./configure
Tout d'abord c'est complexe, et il y a de mon point de vue bien mieux et plus simple.
Pour rappel le but d'un ./configure est de générer le Makefile. Donc si tu fais le Makefile à la main, tu n'utilises donc pas les outils autotools.

Sinon si tu veux t'orienter vers de la génération de Makefile, je te conseil de regarder du côte de CMake :-)
La plupart des nouveaux projets utilisent cet outil : par exemple KDE 5, ...
Zsh | KDE | PC fixe : core i7, carte nvidia
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Avatar de l’utilisateur
Maximilien LIX
yeomen
Messages : 211
Inscription : mer. 23 avr. 2014, 14:27

Re: [Makefile] Petite question sur ./configure

Message par Maximilien LIX »

Ah d'accord je ne savais pas, merci bien. ^^

Je vais jeter un coup d'oeil à CMake.
Linuxien et blogueur en carton
Acer AX3810 (Archlinux & Debian)
Acer Aspire V5 (ubuntu-Mate)
Lenovo Thinkpad Edge E330 (Archlinux)
Avatar de l’utilisateur
Xorg
Maître du Kyudo
Messages : 1933
Inscription : dim. 22 janv. 2012, 19:25
Localisation : Entre le clavier et la chaise.

Re: [Makefile] Petite question sur ./configure(Résolu)

Message par Xorg »

Autotools (alias autohell), c'est vraiment quelque de spécial. Il y a quelques temps en arrière, quand moi aussi je ne pouvais plus me permettre d'écrire des Makefile à la main, j'ai voulu m'y pencher, et c'est une vraie horreur, je ne comprends même pas comment certains développeurs ont fait pour l'utiliser. Entre les fichiers m4, libtool et j'en passe, c'est un vrai chantier. :non:

J'ai eu des retour avec QMake, il paraît que c'est assez simple à prendre en main, mais il s'utilise avec des projets Qt par contre.

Comme Benjarobin en parle, je me suis un peu mis à CMake. Quelques avantages de CMake : cross-platform, largement plus rapide qu'autotools, la sortie est propre et lisible (adieu les multiples lignes qui s'affichent pour compiler juste un fichier), on peut construire le projet dans un autre répertoire pour éviter de polluer le répertoire contenant les sources, support de modules, etc...
À l'inverse, ça m'est déjà arrivé d'avoir des difficultés pour faire certaines choses avec CMake. Il faut savoir qu'il y a deux types de commandes, celles qui sont lancées lors d'un appel à cmake, et celles lancées lors d'un appel à make. Et là finit les galères du genre "Hen mais pourquoi il ne fait pas ce que je lui demande de faire dans mon target personnalisé".
La documentation de CMake n'est pas trop mal, même si des fois j'aimerais bien un peu plus d'explications. Un seul truc que je peux reprocher à CMake, c'est le passage des arguments où le nom des variables est en majuscule ; par exemple cmake -DCMAKE_INSTALL_PREFIX=/usr, c'est un peu plus pénible à écrire que ./configure --prefix=/usr. :chinois:
Arch Linux x86_64 - Sway
AMD Ryzen 5 3600X - 32 Go de DDR4 - SSD NVMe 1 To + SSD SATA 250 Go - Sapphire NITRO+ Radeon RX 580
Image AUR___Image Wiki___Image GitHub
Avatar de l’utilisateur
Maximilien LIX
yeomen
Messages : 211
Inscription : mer. 23 avr. 2014, 14:27

Re: [Makefile] Petite question sur ./configure(Résolu)

Message par Maximilien LIX »

Bon et bien j'ai modifié l'ensemble afin de faire ceci:

CMakeLists.txt

Code : Tout sélectionner

cmake_minimum_required(VERSION 2.6)

project(probuild)
set(EXECUTABLE_OUTPUT_PATH bin/${CMAKE_BUILD_TYPE})


file(

        GLOB_RECURSE
        source_files
        src/*
)



#Déclaration de l'exécutable

add_executable(

        probuild

        ${source_files}

)
PKGBUILD

Code : Tout sélectionner

# Maintainer: Maximilien Di Dio      <mrgamerlix@gmail.com>

pkgname=probuild-git
_pkgname_simple=probuild
pkgver=r119.dd9d243
pkgrel=1
pkgdesc="An amelioration of GCC compiler which allow to compile a program without links in the command !"
arch=('any')
url="https://gitlab.com/MaximilienLIX/probuild"
license=('LGPL3')
depends=('gcc')
makedepends=('git' 'cmake')
source=("git+https://gitlab.com/MaximilienLIX/probuild.git")
md5sums=('SKIP')

pkgver() {
   cd "$_pkgname_simple"
   printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
}

build() {
   cd "$_pkgname_simple/LINUX"
   cmake -DCMAKE_INSTALL_PREFIX=/usr
   make
}

package() {
   cd "$_pkgname_simple/LINUX"
   install -d "$pkgdir/usr/bin/"
   install -d "$pkgdir/usr/share/man/man1/"
   install -m755 "$srcdir/$_pkgname_simple/LINUX/bin/probuild" "$pkgdir/usr/bin"
   install -m644 "$srcdir/$_pkgname_simple/LINUX/doc/probuild.gz" "$pkgdir/usr/share/man/man1/"
}
Mais bon j'imagine que je peux sûrement me passer de install et utiliser un make install pour installer l'ensemble. (chose que je n'arrive pas à faire, d'où une telle utilisation de la fonction package()...
Linuxien et blogueur en carton
Acer AX3810 (Archlinux & Debian)
Acer Aspire V5 (ubuntu-Mate)
Lenovo Thinkpad Edge E330 (Archlinux)
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17186
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [Makefile] Petite question sur ./configure(Résolu)

Message par benjarobin »

Il suffit de lire la documentation : http://www.cmake.org/cmake/help/latest/ ... stall.html

Je viens de regarder ton "programme", désolé tu risque de le prendre mal, mais je ne comprend même pas l’intérêt d'un tel programme...
Si ton projet est "petit" tu feras un Makefile, et c'est vite fait de rajouter les options qui vont bien, et si ton projet est un peu plus gros tu utilises CMake qui gère ceci 10000000000000 fois mieux...

Tu vas vraiment mal le prendre, mais personne ne va utiliser ton programme, je ne ferais aucun commentaire sur le code C (j’hésite à sauter par la fenêtre), alors c'est un peu prématuré de le mettre sur AUR...
Zsh | KDE | PC fixe : core i7, carte nvidia
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Avatar de l’utilisateur
Maximilien LIX
yeomen
Messages : 211
Inscription : mer. 23 avr. 2014, 14:27

Re: [Makefile] Petite question sur ./configure(Résolu)

Message par Maximilien LIX »

Je viens de regarder ton "programme", désolé tu risque de le prendre mal, mais je ne comprend même pas l’intérêt d'un tel programme...
Ça sert juste à éviter de linker soi-même le fichier source avec la bonne bibliothèque lorsqu'on teste une nouvelle lib. Ça me sert quand j'ai besoin de compiler un code vite fait faisant appel à la sdl par exemple. C'est un modeste outil créé par un geek et non un ingénieur. :)

Code : Tout sélectionner

Si ton projet est "petit" tu feras un Makefile, et c'est vite fait de rajouter les options qui vont bien, et si ton projet est un peu plus gros tu utilises CMake qui gère ceci 10000000000000 fois mieux...
Je m'en fiche, si je peux toucher un peu à tout, je préfère m'embêter à utiliser CMake ne serait-ce que pour apprendre des trucs qui me servirons plus tard. (sans doute)
Tu vas vraiment mal le prendre, mais personne ne va utiliser ton programme, je ne ferais aucun commentaire sur le code C (j’hésite à sauter par la fenêtre), alors c'est un peu prématuré de le mettre sur AUR...
La popularité ne m'intéresse pas, d'ailleurs j'ai mis sur AUR la version Git autrement dit ce n'est pas comme si le code n'allait pas changer. Sinon je ne savais pas qu'il existait un lien entre la programmation et la défenestration. :humour:

Je pensais pourtant avoir fait quelque chose de propre (sauf peut-être pour la partie faisant appel à fork() ) mais n'étant pas du métier (et n'ayant pas non plus la prétention d'y être) je pense que le mieux reste de partager son expérience du code et d'aider les néophytes dans mon genre au lieu de penser à ouvrir sa fenêtre. C'est pour moi la base du web (à savoir, partager ses acquis), ce qui fait qu'on peut en apprendre énormément pour le peu qu'on a affaire à des personnes qui acceptent de transmettre leurs connaissances et leurs critiques. Tant que ça reste constructif je prends avec plaisir or, savoir que tu as hésité à passer par dessus bord ne m'aide en rien. Enfin c'est mon point de vue et il n'est sans doute pas réciproque, désolé. :)
Linuxien et blogueur en carton
Acer AX3810 (Archlinux & Debian)
Acer Aspire V5 (ubuntu-Mate)
Lenovo Thinkpad Edge E330 (Archlinux)
Répondre