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

Realisierung des Karusselleffekts basierend auf jQuery

In diesem Artikel wird der spezifische Code von j...

Ein Artikel bringt Ihnen die Vererbung von JS-Funktionen bei

Inhaltsverzeichnis 1. Einleitung: 2. Vererbung de...

So verwenden Sie Node zum Implementieren des statischen Datei-Cachings

Inhaltsverzeichnis Cache Klassifizierung des Cach...

Was sind die Unterschiede zwischen var let const in JavaScript

Inhaltsverzeichnis 1. Wiederholte Erklärung 1,1 v...

Lösen Sie das Problem der Verwendung von weniger in Vue

1. Installieren Sie weniger Abhängigkeiten: npm i...

Schritte zum Erstellen eines Dateiservers mit Apache unter Linux

1. Über den Dateiserver Wenn Sie in einem Projekt...

Umfassende Analyse von Prototypen, Prototypobjekten und Prototypketten in js

Inhaltsverzeichnis Prototypen verstehen Prototypo...

Axios storniert wiederholte Anfragen

Inhaltsverzeichnis Vorwort 1. So stornieren Sie e...

Erste Erkundung gängiger Befehle für Docker-Anfänger

Bevor wir Docker offiziell verwenden, machen wir ...

Detaillierte Erklärung von Promises in JavaScript

Inhaltsverzeichnis Grundlegende Verwendung von Pr...