Schritte zur Verwendung von autoconf zum Generieren von Makefile und Kompilieren des Projekts

Schritte zur Verwendung von autoconf zum Generieren von Makefile und Kompilieren des Projekts

Vorwort

Unter Linux ist zum Kompilieren und Verknüpfen die Verwendung eines Makefiles erforderlich. Allerdings ist das Schreiben eines guten Makefiles nicht einfach, und das Schreiben eines Standard-Makefiles ist sogar noch problematischer. Wir können autoconf verwenden, um ein Makefile zu generieren, was insbesondere bei großen Projekten viel Ärger ersparen kann.

Hier werde ich anhand eines Projekts zeigen, wie es geht. Einige Schritte sind nicht erforderlich. Wenn Sie jedoch nicht erkennen können, welche Schritte nicht erforderlich sind, befolgen Sie sie am besten Schritt für Schritt, da einige Schritte ausgelassen werden und der Code entsprechend geändert werden muss (z. B. Ändern des Pfads usw.).

Schritt

Installieren Sie zuerst autoconf

sudo apt-get install autoconf

Einen neuen Projektordner erstellen (zum Beispiel: joy)

mkdir joy

cd joy

Erstellen Sie darin zwei neue Ordner „lib“ und „src“, um die Bibliotheksdateien und Quelldateien des Projekts zu speichern.

mkdir lib

mkdir src

Wie in der folgenden Abbildung dargestellt:

Rufen Sie den Lib-Ordner auf, erstellen Sie eine neue Header-Datei, z. B. haha.h, und deklarieren Sie nach dem Zufallsprinzip eine Funktion.

cd lib

gedit haha.h

//haha.h
#include <stdio.h>
ungültig printhaha();

Rufen Sie den Ordner „src“ auf und erstellen Sie eine neue C-Datei, z. B. haha.c, um die Funktionen der Header-Datei zu implementieren. Erstellen Sie eine neue C-Datei, z. B. main_code.c, um die Hauptfunktion zu schreiben.

cd ../src

gedit haha.c

//haha.c
#include "../lib/haha.h"
void printhaha()
{
  printf("haha\n");
}
//Hauptcode.c
#include "../lib/haha.h"
void main()
{
  druckenhaha();
}

Zurück zum Joy-Ordner, unsere Projektdateien wurden geschrieben

cd ..

Führen Sie Autoscan aus, um configure.scan zu generieren

autoscan

configure.scan bearbeiten

gedit configure.scan

Die Datei sieht vor der Bearbeitung so aus

#Bearbeiten Sie die Originaldatei vor# -*- Autoconf -*-
# Verarbeiten Sie diese Datei mit autoconf, um ein Konfigurationsskript zu erstellen.
AC_PREREQ([2,69])
AC_INIT([VOLLSTÄNDIGER PAKETNAME], [VERSION], [FEHLERBERICHT-ADRESSE])
AC_CONFIG_SRCDIR([src/haha.c])
AC_CONFIG_HEADERS([config.h])
# Sucht nach Programmen.
AC_PROG_CC
# Sucht nach Bibliotheken.
# Überprüft, ob Header-Dateien vorhanden sind.
# Überprüft Typdefinitionen, Strukturen und Compilereigenschaften.
# Überprüft, ob Bibliotheksfunktionen vorhanden sind.
AC_AUSGANG

Das Präfix AC bezieht sich auf AutoConf
Machen Sie sich keine Sorgen um AC_PREREQ
Geben Sie [Paketname] [Version] [Fehlermeldungsadresse (das heißt Ihre E-Mail-Adresse)] in AC_INIT ein.
Tragen Sie unter dem Quelldateipfad in AC_CONFIG_SRCDIR einen beliebigen Dateinamen ein. Autoconf ermittelt, ob der Pfad korrekt ist, indem es prüft, ob die Datei existiert. Im Allgemeinen müssen Sie sich darüber keine Gedanken machen.
Machen Sie sich keine Gedanken über das Einfügen des folgenden Satzes in AC_CONFIG_HEADERS. Er ist in der Automake-Phase erforderlich, andernfalls wird ein Fehler gemeldet.
AM_INIT_AUTOMAKE
Das Präfix AM bezieht sich auf AutoMake
Der letzte AC_OUTPUT wird in AC_OUTPUT geändert (Makefile)
Die geänderte Datei sieht folgendermaßen aus:

#Geänderte Dateien# -*- Autoconf -*-
# Verarbeiten Sie diese Datei mit autoconf, um ein Konfigurationsskript zu erstellen.
AC_PREREQ([2,69])
AC_INIT(hhh, 1.0, [email protected])
AC_CONFIG_SRCDIR([src/haha.c])
AC_CONFIG_HEADERS([config.h])
AM_INIT_AUTOMAKE  
# Sucht nach Programmen.
AC_PROG_CC
# Sucht nach Bibliotheken.
# Überprüft, ob Header-Dateien vorhanden sind.
# Überprüft Typdefinitionen, Strukturen und Compilereigenschaften.
# Überprüft, ob Bibliotheksfunktionen vorhanden sind.
AC_OUTPUT (Makefile)

Speichern Sie „configure.scan“ und benennen Sie es in „configure.ac“ um.

Erstellen Sie ein neues Makefile.am

gedit Makefile.am

Geben Sie den folgenden Code ein

AUTOMAKE_OPTIONS= \
  ausländisch \
  Unterverzeichnisobjekte
bin_PROGRAMS=test_prj 
test_prj_SOURCES= \
  lib/haha.h \
  src/haha.c \
  src/main_code.c

Auf AUTOMAKE_OPTIONS folgen durch Leerzeichen getrennte Automake-Ausführungsoptionen.
fremd bedeutet, dass nur notwendige Dateien erkannt werden;
subdir-objects bedeutet, dass die kompilierten .o-Dateien (zusammen mit den Quelldateien) im Unterpfad abgelegt werden können. Ohne diese Option werden alle .o-Dateien im Stammverzeichnis des Projekts abgelegt;
Der Name nach bin_PROGRAMS ist der Name der generierten ausführbaren Binärdatei. Es können mehrere bin_PROGRAMS vorhanden sein, aber jedes bin_PROGRAMS muss über ein entsprechendes xxx_SOURCES verfügen;
xxx_SOURCES sind die Abhängigkeiten der ausführbaren Datei xxx, einschließlich Header-Dateien, Quelldateien usw.

Generieren Sie die Datei aclocal.m4 mit aclocal

aclocal

Konfigurationsdatei mit autoconf generieren

autoconf

Generieren Sie config.h.in mit Autoheader

autoheader

Um Makefile.in mit automake zu generieren, müssen Sie --add-missing hinzufügen, um automatisch die Standarddatei hinzuzufügen

automake --add-missing

Dann ist unsere Software fertig und wir können das gesamte Paket auf GitHub oder ein Open-Source-Forum hochladen.

Wie kompilieren und verknüpfen andere ausführbare Dateien, nachdem sie unser Quellcodepaket heruntergeladen haben? Oder wie kompilieren und verknüpfen wir unsere ausführbaren Dateien?

Nachfolgend sind die allgemeinen Schritte zur Installation des Quellcodes aufgeführt, die auch die Schritte für unsere Kompilierung und Verknüpfung sind

Generieren Sie zuerst das Makefile

./configure

Dann machen Sie

make

Jetzt können wir sehen, dass die ausführbare Datei test_prj generiert wurde

Führen Sie es aus und die Ergebnisse sind wie folgt:

Das Ergebnis ist korrekt.

Beim Aufrufen des src-Verzeichnisses fanden wir zwei weitere Dateien


Dies ist die Rolle von Unterverzeichnisobjekten in AUTOMAKE_OPTIONS. Ohne diesen Satz erscheinen die beiden .o-Dateien in Ihrem Stammverzeichnis. Wenn Ihr Projekt leider groß ist und Dateien mit demselben Namen vorhanden sind, kann dies schwerwiegende Folgen haben. Es wird daher empfohlen, diesen Satz hinzuzufügen.

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Wenn Sie mehr darüber erfahren möchten, schauen Sie sich bitte die folgenden Links an

Das könnte Sie auch interessieren:
  • C++ Detaillierte Erklärung des Makefile mit allgemeinen Vorlagen
  • So unterscheiden Sie verschiedene Plattformen in Makefile/cmake/node-gyp
  • Python verwendet Paramiko zum Betrieb von Linux
  • Schritte zum Übertragen von Dateien und Ordnern zwischen zwei Linux-Servern
  • Lösungen für Dateien/Ordner, die unter Linux nicht gelöscht werden können
  • So finden Sie den Speicherort des aktuellen Python-Interpreters in Linux
  • Anwendungsbeispiele für Arrays und assoziative Arrays in der Linux-Shell
  • Implementierungsmethode von Android zum Ausführen von Shell-Skripten im Linux-Terminal, um das Protokoll der aktuell ausgeführten App direkt auszudrucken
  • So führen Sie Linux-Befehlsprogramme remote und stapelweise mit pyqt aus
  • Verwendung der Zabbix-API in einer Linux-Shell-Umgebung

<<:  CocosCreator Universal Framework Design Network

>>:  MySql fügt Daten erfolgreich ein, meldet aber [Err] 1055 Fehlerlösung

Artikel empfehlen

Mysql5.7.14 Linux-Version Passwort vergessen perfekte Lösung

Fügen Sie in der Datei /etc/my.conf unter [mysqld...

UTF-8- und GB2312-Webkodierung

In letzter Zeit haben mich viele Studenten zur Ko...

Detailliertes Tutorial zur Installation von Docker auf CentOS 8

1. Frühere Versionen yum entfernen Docker Docker-...

Einige wichtige Punkte des visuellen Website-Designs

Vom Kunsthandwerksdesign über Grafikdesign bis hin...

Native js implementiert Warenkorb-Logik und -Funktionen

In diesem Artikelbeispiel wird der spezifische Co...

Verstehen Sie die Verwendung des All-Attributs von CSS3

1. Kompatibilität Wie unten dargestellt: Die Komp...

Implementierung der Installation von Docker in einer Win10-Umgebung

1. Rufen Sie die offizielle Docker-Website auf Ge...

HTML ungeordnete Liste Aufzählungspunkte mit Bildern CSS schreiben

Erstellen Sie eine HTML-Seite mit einer ungeordnet...

MySQL-Installationsinformationen unter Linux-Server anzeigen

Sehen Sie sich die Installationsinformationen von...

So verwenden Sie Cursor-Trigger in MySQL

Cursor Die von der Auswahlabfrage zurückgegebenen...

Detaillierte Erklärung der Verwendung von Bildschirmbefehlen in Linux

GUN-Bildschirm: Offizielle Website: http://www.gn...

Ubuntu 16.04 64-Bit in drei Schritten mit 32-Bit-Programmen kompatibel

Schritt 1: Bestätigen Sie die Architektur Ihres S...