Makefiles et développement multi-plateformes

J’ai essayé de comprendre comment créer un programme C pouvant être compilé pour tous les principaux systèmes d’exploitation. J’ai envisagé d’utiliser des makefiles, donc je n’aurais qu’à changer le système d’exploitation cible, mais j’ai quelques problèmes. Mon premier problème est que je ne sais pas comment changer le système d’exploitation cible afin de pouvoir comstackr sur un système d’exploitation tout en utilisant l’application sur tous les systèmes d’exploitation. Mon deuxième problème est que je ne peux pas comprendre comment faire pour comstackr automatiquement tous les fichiers .c dans le répertoire src, je n’ai donc pas besoin de modifier le fichier makefile chaque fois que j’ajoute un nouveau fichier. Est-ce que quelqu’un sait comment faire ce genre de choses?

Mon fichier make actuel (actuellement non modifié)

CC=gcc CFLAGS=-c -Wall LDFLAGS= SOURCES=main.cpp hello.cpp factorial.cpp OBJECTS=$(SOURCES:.cpp=.o) EXECUTABLE=hello all: $(SOURCES) $(EXECUTABLE) $(EXECUTABLE): $(OBJECTS) $(CC) $(LDFLAGS) $(OBJECTS) -o $@ .cpp.o: $(CC) $(CFLAGS) $< -o $@q2 

GNU Autoconf est un bon endroit pour commencer. Je ne peux pas vous donner une réponse complète car je ne sais pas ce que vous feriez pour Windows si ce n’est de conserver un ensemble de scripts nmake. Bien qu’il y ait une courbe d’apprentissage, ils permettent d’écrire des fichiers de création et du code C qui fonctionnent sur toutes les plateformes. Il ne gérera pas seulement plusieurs fichiers source pour vous, mais vous aidera également à définir une cible, telle que “tous”, “installer”, “nettoyer”, etc. Si vous connaissez le téléchargement d’un projet, tapez “./configure” puis «make install», vous avez probablement déjà été utilisateur d’un projet généré par Autoconf.

Autoconf a d’autres raisons que de gérer plusieurs fichiers source.

Ce qui rend le développement C / C ++ difficile entre les différentes versions d’Unix, c’est la définition de «Unix» et de «C». Les différentes versions d’Unix ont des appels de bibliothèque ou système légèrement différents, en fonction du type de normes qu’ils gèrent. Il en va de même pour C. Ainsi, lors de l’écriture de code, vous verrez #defines spécifier un groupe de symboles de préprocesseur définissant une version d’Unix et de C que vous souhaitez utiliser. Passer de GCC à HP C ou au compilateur C d’un autre fournisseur peut inclure différents niveaux de comportement «par défaut». Vous devez donc expliciter le comportement attendu.

Deuxièmement, vous devez définir quelles bibliothèques sont requirejses. Dans votre construction, vous devrez peut-être rechercher les bibliothèques mysql et décider quoi faire si ces bibliothèques ne sont pas installées. Dans certains cas, vous pourriez avoir besoin de ne pas construire du tout ou dans certains cas, vous pourriez simplement remplacer par une autre bibliothèque (comme libdb). Après avoir essayé d’écrire des makefiles complexes pour prendre en charge deux systèmes d’exploitation (Solaris et Linux), je ne voudrais pas réinventer cette roue.