Fix newlines

This commit is contained in:
Boris Verkhovskiy 2024-05-14 17:51:24 -06:00
parent 8c3acb8fb2
commit 717d099842
2 changed files with 306 additions and 261 deletions

View File

@ -1,260 +1,260 @@
--- ---
category: tool category: tool
tool: make tool: make
filename: Makefile filename: Makefile
contributors: contributors:
- ["Robert Steed", "https://github.com/robochat"] - ["Robert Steed", "https://github.com/robochat"]
- ["Stephan Fuhrmann", "https://github.com/sfuhrm"] - ["Stephan Fuhrmann", "https://github.com/sfuhrm"]
translators: translators:
- ["Andrés Perdomo", "https://github.com/andres7293"] - ["Andrés Perdomo", "https://github.com/andres7293"]
lang: es-es lang: es-es
--- ---
Un archivo Makefile define un conjunto de reglas para crear un objetivo (o Un archivo Makefile define un conjunto de reglas para crear un objetivo (o
varios objetivos). Su propósito es hacer la mínima cantidad de trabajo necesaria varios objetivos). Su propósito es hacer la mínima cantidad de trabajo necesaria
para actualizar un objetivo a la versión más reciente de la fuente. Escrito para actualizar un objetivo a la versión más reciente de la fuente. Escrito
famosamente en un fin de semana por Stuart Feldman en 1976, todavía se utiliza famosamente en un fin de semana por Stuart Feldman en 1976, todavía se utiliza
ampliamente (especialmente en Unix y Linux) a pesar de muchos competidores y ampliamente (especialmente en Unix y Linux) a pesar de muchos competidores y
críticas. críticas.
Existen muchas variedades de Make en existencia, no obstante, este artículo Existen muchas variedades de Make en existencia, no obstante, este artículo
asume que estamos utilizando GNU Make, que es el estándar en Linux. asume que estamos utilizando GNU Make, que es el estándar en Linux.
```make ```make
# Los comentarios se pueden escribir de esta forma. # Los comentarios se pueden escribir de esta forma.
# El fichero debe tener el nombre de Makefile y luego puede ser ejecutado # El fichero debe tener el nombre de Makefile y luego puede ser ejecutado
# como `make <objetivo>`. # como `make <objetivo>`.
# De lo contrario, se utiliza `make -f "nombre_archivo" <objetivo>` # De lo contrario, se utiliza `make -f "nombre_archivo" <objetivo>`
# Advertencia: ¡solo use TABULACIONES para la identación en Makefiles, nunca # Advertencia: ¡solo use TABULACIONES para la identación en Makefiles, nunca
# espacios! # espacios!
#----------------------------------------------------------------------- #-----------------------------------------------------------------------
# Fundamentos # Fundamentos
#----------------------------------------------------------------------- #-----------------------------------------------------------------------
# Las reglas tienen el formato # Las reglas tienen el formato
# objetivo: <prerrequisito> # objetivo: <prerrequisito>
# donde prerrequisito es opcional. # donde prerrequisito es opcional.
# Una regla - esta regla solamente se ejecutará si file0.txt no existe. # Una regla - esta regla solamente se ejecutará si file0.txt no existe.
file0.txt: file0.txt:
echo "foo" > file0.txt echo "foo" > file0.txt
# Incluso los comandos en esta sección de 'receta' se pasan a la shell. # Incluso los comandos en esta sección de 'receta' se pasan a la shell.
# Prueba `make file0.txt` o simplemente 'make' - La primera regla es la # Prueba `make file0.txt` o simplemente 'make' - La primera regla es la
# predeterminada. # predeterminada.
# Esta regla se ejecutará solo si file0.txt es más reciente que file1.txt. # Esta regla se ejecutará solo si file0.txt es más reciente que file1.txt.
file1.txt: file0.txt file1.txt: file0.txt
cat file0.txt > file1.txt cat file0.txt > file1.txt
# Use las mismas reglas de comillas que en la shell. # Use las mismas reglas de comillas que en la shell.
@cat file0.txt >> file1.txt @cat file0.txt >> file1.txt
# @ evita que el comando se muestre en stdout. # @ evita que el comando se muestre en stdout.
-@echo 'hello' -@echo 'hello'
# - Quiere decir que make continuará en caso de error. # - Quiere decir que make continuará en caso de error.
# Pruebe 'make file1.txt` en la línea de comandos. # Pruebe 'make file1.txt` en la línea de comandos.
# Una regla puede tener múltiples objetivos y múltiples prerrequisitos # Una regla puede tener múltiples objetivos y múltiples prerrequisitos
file2.txt file3.txt: file0.txt file1.txt file2.txt file3.txt: file0.txt file1.txt
touch file2.txt touch file2.txt
touch file3.txt touch file3.txt
# Make se quejará de múltiples recetas para la misma regla. Sin embargo, # Make se quejará de múltiples recetas para la misma regla. Sin embargo,
# las reglas vacías no cuentan y se pueden utilizar para agregar nuevas # las reglas vacías no cuentan y se pueden utilizar para agregar nuevas
# dependencias # dependencias
#----------------------------------------------------------------------- #-----------------------------------------------------------------------
# Objetivos ficticios (Phony Targets) # Objetivos ficticios (Phony Targets)
#----------------------------------------------------------------------- #-----------------------------------------------------------------------
# Un objetivo ficticio (phony target). Cualquier objetivo que no sea un archivo. # Un objetivo ficticio (phony target). Cualquier objetivo que no sea un archivo.
# Nunca estará actualizado, por lo que make siempre tratará de ejecutarlo. # Nunca estará actualizado, por lo que make siempre tratará de ejecutarlo.
all: make process all: make process
# Podemos declarar cosas sin orden. # Podemos declarar cosas sin orden.
maker: maker:
touch ex0.txt ex1.txt touch ex0.txt ex1.txt
# Se puede evitar que las reglas ficticias (phony) se rompan cuando un archivo # Se puede evitar que las reglas ficticias (phony) se rompan cuando un archivo
# real tiene el mismo nombre usando: # real tiene el mismo nombre usando:
.PHONY: all maker process .PHONY: all maker process
# Esto es un objetivo especial. Hay varios otros. # Esto es un objetivo especial. Hay varios otros.
# Una regla con una dependencia en un objetivo ficticio (phony target) # Una regla con una dependencia en un objetivo ficticio (phony target)
# se ejecutara siempre: # se ejecutara siempre:
ex0.txt ex1.txt: maker ex0.txt ex1.txt: maker
# Los objetivos ficticios (phony target) más comunes son: # Los objetivos ficticios (phony target) más comunes son:
# all make clean install... # all make clean install...
#----------------------------------------------------------------------- #-----------------------------------------------------------------------
# Variables automáticas y Wildcards # Variables automáticas y Wildcards
#----------------------------------------------------------------------- #-----------------------------------------------------------------------
process: file*.txt # usa un wildcard para coincidir con los nombres de archivos. process: file*.txt # usa un wildcard para coincidir con los nombres de archivos.
@echo $^ # $^ es una variable que contiene una lista de todos los prerrequisitos @echo $^ # $^ es una variable que contiene una lista de todos los prerrequisitos
@echo $@ # imprime el nombre del objetivo @echo $@ # imprime el nombre del objetivo
#(para reglas con múltiples objetivos, $@ es el que hizo que se ejecutara la regla) #(para reglas con múltiples objetivos, $@ es el que hizo que se ejecutara la regla)
@echo $< # el primer prerrequisito listado @echo $< # el primer prerrequisito listado
@echo $? # solo las dependencias que están desactualizadas @echo $? # solo las dependencias que están desactualizadas
@echo $+ # todas las dependencias incluyendo las duplicadas (a diferencia de lo normal) @echo $+ # todas las dependencias incluyendo las duplicadas (a diferencia de lo normal)
#@echo $| # solo los 'prerrequisitos solicitados' #@echo $| # solo los 'prerrequisitos solicitados'
# Incluso si dividimos las definiciones de las dependencias, de las reglas, $^ # Incluso si dividimos las definiciones de las dependencias, de las reglas, $^
# las encontrará # las encontrará
process: ex1.txt file0.txt process: ex1.txt file0.txt
# ext1.xt se encontrará pero file0.txt se duplicará. # ext1.xt se encontrará pero file0.txt se duplicará.
#----------------------------------------------------------------------- #-----------------------------------------------------------------------
# Patrones # Patrones
#----------------------------------------------------------------------- #-----------------------------------------------------------------------
# Se puede instruir a make sobre como convertir ciertos tipos de archivos en # Se puede instruir a make sobre como convertir ciertos tipos de archivos en
# otros archivos. # otros archivos.
%.png: %.svg %.png: %.svg
inkscape --export-png $^ inkscape --export-png $^
# Las reglas de patrones solo harán algo si make decide crear el objetivo. # Las reglas de patrones solo harán algo si make decide crear el objetivo.
# Los directorios no suelen tenerse en cuenta al coincidir con reglas de # Los directorios no suelen tenerse en cuenta al coincidir con reglas de
# patrones. # patrones.
# Pero make intentará usar la regla más apropiada disponible. # Pero make intentará usar la regla más apropiada disponible.
small/%.png: %.svg small/%.png: %.svg
inkscape --export-png --export-dpi 30 $^ inkscape --export-png --export-dpi 30 $^
# make usará la última versión de una regla de patrón que encuentre. # make usará la última versión de una regla de patrón que encuentre.
%.png: %.svg %.png: %.svg
@echo esta regla es elegida @echo esta regla es elegida
# Sin embargo make usará la primera regla de patrón que pueda construir el # Sin embargo make usará la primera regla de patrón que pueda construir el
# objetivo. # objetivo.
%.png: %.ps %.png: %.ps
@echo esta regla no es elegida si *.svg y *.ps están ambas presentes @echo esta regla no es elegida si *.svg y *.ps están ambas presentes
# Make ya tiene algunas reglas de patrón integradas. # Make ya tiene algunas reglas de patrón integradas.
# Por ejemplo, sabe cómo convertir archivos *.c en archivos *.o. # Por ejemplo, sabe cómo convertir archivos *.c en archivos *.o.
# En makefiles antiguos se solían utilizar las reglas de sufijo en lugar de las # En makefiles antiguos se solían utilizar las reglas de sufijo en lugar de las
# reglas de patrón # reglas de patrón
.png.ps: .png.ps:
@echo esta regla es similar a una regla de patrón. @echo esta regla es similar a una regla de patrón.
# Instruye a make sobre una regla de sufijo # Instruye a make sobre una regla de sufijo
.SUFFIXES: .png .SUFFIXES: .png
#----------------------------------------------------------------------- #-----------------------------------------------------------------------
# Variables # Variables
#----------------------------------------------------------------------- #-----------------------------------------------------------------------
# también conocidas como macros. # también conocidas como macros.
# Las variables son básicamente de tipo cadena (string) # Las variables son básicamente de tipo cadena (string)
name = Ted name = Ted
name2="Sarah" name2="Sarah"
echo: echo:
@echo $(name) @echo $(name)
@echo ${name2} @echo ${name2}
@echo $name # Esto no funcionará, se tratará como $(n)name. @echo $name # Esto no funcionará, se tratará como $(n)name.
@echo $(name3) # Variables desconocidas se tratarán como cadenas vacías. @echo $(name3) # Variables desconocidas se tratarán como cadenas vacías.
# Hay 4 lugares donde se pueden definir variables. # Hay 4 lugares donde se pueden definir variables.
# En orden de prioridad de mayor a menor: # En orden de prioridad de mayor a menor:
# 1: argumentos de línea de comando. # 1: argumentos de línea de comando.
# 2: Makefile. # 2: Makefile.
# 3: variables de entorno de la shell - make las importa automáticamente. # 3: variables de entorno de la shell - make las importa automáticamente.
# 4: make tiene algunas variables predefinidas. # 4: make tiene algunas variables predefinidas.
name4 ?= Jean name4 ?= Jean
# Solo establece la variable si la variable de entorno no está aún definida. # Solo establece la variable si la variable de entorno no está aún definida.
override name5 = David override name5 = David
# Detiene que los argumentos de línea de comandos modifiquen esta variable. # Detiene que los argumentos de línea de comandos modifiquen esta variable.
name4 +=grey name4 +=grey
# Añade valores a la variable (incluye un espacio). # Añade valores a la variable (incluye un espacio).
# Valores de variables específicos de patrones (Extension de GNU). # Valores de variables específicos de patrones (Extension de GNU).
echo: name2 = Sara # Verdadero dentro de la regla coincidente echo: name2 = Sara # Verdadero dentro de la regla coincidente
# y también dentro de sus dependencias recursivas rehechas # y también dentro de sus dependencias recursivas rehechas
# (¡excepto que puede romperse cuando el grafo se complica demasiado!) # (¡excepto que puede romperse cuando el grafo se complica demasiado!)
# Algunas variables son definidas automáticamente por make. # Algunas variables son definidas automáticamente por make.
echo_inbuilt: echo_inbuilt:
echo $(CC) echo $(CC)
echo ${CXX} echo ${CXX}
echo $(FC) echo $(FC)
echo ${CFLAGS} echo ${CFLAGS}
echo $(CPPFLAGS) echo $(CPPFLAGS)
echo ${CXXFLAGS} echo ${CXXFLAGS}
echo $(LDFLAGS) echo $(LDFLAGS)
echo ${LDLIBS} echo ${LDLIBS}
#----------------------------------------------------------------------- #-----------------------------------------------------------------------
# Variables 2 # Variables 2
#----------------------------------------------------------------------- #-----------------------------------------------------------------------
# El primer tipo de variables se evalúan cada vez que se usan. # El primer tipo de variables se evalúan cada vez que se usan.
# Esto puede ser costoso, por lo que existe un segundo tipo de variable que se # Esto puede ser costoso, por lo que existe un segundo tipo de variable que se
# evalúa solo una vez. (Esta es una extensión de GNU make) # evalúa solo una vez. (Esta es una extensión de GNU make)
var := hello var := hello
var2 ::= $(var) hello var2 ::= $(var) hello
#:= y ::= son equivalentes #:= y ::= son equivalentes
# Estas variables se evalúan de manera procedimental (en el orden en que # Estas variables se evalúan de manera procedimental (en el orden en que
# aparecen), ¡rompiendo así con el resto del lenguaje! # aparecen), ¡rompiendo así con el resto del lenguaje!
# Esto no funciona # Esto no funciona
var3 ::= $(var4) and good luck var3 ::= $(var4) and good luck
var4 ::= good night var4 ::= good night
#----------------------------------------------------------------------- #-----------------------------------------------------------------------
# Funciones # Funciones
#----------------------------------------------------------------------- #-----------------------------------------------------------------------
# make tiene muchas funciones disponibles. # make tiene muchas funciones disponibles.
sourcefiles = $(wildcard *.c */*.c) sourcefiles = $(wildcard *.c */*.c)
objectfiles = $(patsubst %.c,%.o,$(sourcefiles)) objectfiles = $(patsubst %.c,%.o,$(sourcefiles))
# El formato es $(func arg0,arg1,arg2...) # El formato es $(func arg0,arg1,arg2...)
# Algunos ejemplos # Algunos ejemplos
ls: * src/* ls: * src/*
@echo $(filter %.txt, $^) @echo $(filter %.txt, $^)
@echo $(notdir $^) @echo $(notdir $^)
@echo $(join $(dir $^),$(notdir $^)) @echo $(join $(dir $^),$(notdir $^))
#----------------------------------------------------------------------- #-----------------------------------------------------------------------
# Directrices (Directives) # Directrices (Directives)
#----------------------------------------------------------------------- #-----------------------------------------------------------------------
# Incluye otros makefiles, útil para código de plataformas específicas # Incluye otros makefiles, útil para código de plataformas específicas
include foo.mk include foo.mk
sport = tennis sport = tennis
# Compilación condicional # Compilación condicional
report: report:
ifeq ($(sport),tennis) ifeq ($(sport),tennis)
@echo 'game, set, match' @echo 'game, set, match'
else else
@echo "They think it's all over; it is now" @echo "They think it's all over; it is now"
endif endif
# También existe ifneq, ifdef, ifndef # También existe ifneq, ifdef, ifndef
foo = true foo = true
ifdef $(foo) ifdef $(foo)
bar = 'hello' bar = 'hello'
endif endif
``` ```
### Más recursos (en inglés) ### Más recursos (en inglés)
+ [GNU Make documentation](https://www.gnu.org/software/make/manual/) + [GNU Make documentation](https://www.gnu.org/software/make/manual/)
+ [Software carpentry tutorial](http://swcarpentry.github.io/make-novice/) + [Software carpentry tutorial](http://swcarpentry.github.io/make-novice/)

47
hre.csv
View File

@ -1 +1,46 @@
Ix,Dynasty,Name,Birth,Death,Coronation 1,Coronation 2,Ceased to be Emperor N/A,Carolingian,Charles I,2 April 742,28 January 814,25 December 800,N/A,28 January 814 N/A,Carolingian,Louis I,778,20 June 840,11 September 813,5 October 816,20 June 840 N/A,Carolingian,Lothair I,795,29 September 855,5 April 823,N/A,29 September 855 N/A,Carolingian,Louis II,825,12 August 875,15 June 844,18 May 872,12 August 875 N/A,Carolingian,Charles II,13 June 823,6 October 877,29 December 875,N/A,6 October 877 N/A,Carolingian,Charles III,13 June 839,13 January 888,12 February 881,N/A,11 November 887 N/A,Widonid,Guy III,835,12 December 894,21 February 891,N/A,12 December 894 N/A,Widonid,Lambert I,880,15 October 898,30 April 892,N/A,15 October 898 N/A,Carolingian,Arnulph,850,8 December 899,22 February 896,N/A,8 December 899 N/A,Bosonid,Louis III,880,5 June 928,22 February 901,N/A,21 July 905 N/A,Unruoching,Berengar I,845,7 April 924,December 915,N/A,7 April 924 1,Ottonian,Otto I,23 November 912,7 May 973,2 February 962,N/A,7 May 973 2,Ottonian,Otto II,955,7 December 983,25 December 967,N/A,7 December 983 3,Ottonian,Otto III,980,23 January 1002,21 May 996,N/A,23 January 1002 4,Ottonian,Henry II,6 May 973,13 July 1024,14 February 1014,N/A,13 July 1024 5,Salian,Conrad II,990,4 June 1039,26 March 1027,N/A,4 June 1039 6,Salian,Henry III,29 October 1017,5 October 1056,25 December 1046,N/A,5 October 1056 7,Salian,Henry IV,11 November 1050,7 August 1106,31 March 1084,N/A,December 1105 8,Salian,Henry V,8 November 1086,23 May 1125,13 April 1111,N/A,23 May 1125 9,Supplinburg,Lothair III,9 June 1075,4 December 1137,4 June 1133,N/A,4 December 1137 10,Staufen,Frederick I,1122,10 June 1190,18 June 1155,N/A,10 June 1190 11,Staufen,Henry VI,November 1165,28 September 1197,14 April 1191,N/A,28 September 1197 12,Welf,Otto IV,1175,19 May 1218,4 October 1209,N/A,1215 13,Staufen,Frederick II,26 December 1194,13 December 1250,22 November 1220,N/A,13 December 1250 14,Luxembourg,Henry VII,1275,24 August 1313,29 June 1312,N/A,24 August 1313 15,Wittelsbach,Louis IV,1 April 1282,11 October 1347,17 January 1328,N/A,11 October 1347 16,Luxembourg,Charles IV,14 May 1316,29 November 1378,5 April 1355,N/A,29 November 1378 17,Luxembourg,Sigismund,14 February 1368,9 December 1437,31 May 1433,N/A,9 December 1437 18,Habsburg,Frederick III,21 September 1415,19 August 1493,19 March 1452,N/A,19 August 1493 19,Habsburg,Maximilian I,22 March 1459,12 January 1519,N/A,N/A,12 January 1519 20,Habsburg,Charles V,24 February 1500,21 September 1558,February 1530,N/A,16 January 1556 21,Habsburg,Ferdinand I,10 March 1503,25 July 1564,N/A,N/A,25 July 1564 22,Habsburg,Maximilian II,31 July 1527,12 October 1576,N/A,N/A,12 October 1576 23,Habsburg,Rudolph II,18 July 1552,20 January 1612,30 June 1575,N/A,20 January 1612 24,Habsburg,Matthias,24 February 1557,20 March 1619,23 January 1612,N/A,20 March 1619 25,Habsburg,Ferdinand II,9 July 1578,15 February 1637,10 March 1619,N/A,15 February 1637 26,Habsburg,Ferdinand III,13 July 1608,2 April 1657,18 November 1637,N/A,2 April 1657 27,Habsburg,Leopold I,9 June 1640,5 May 1705,6 March 1657,N/A,5 May 1705 28,Habsburg,Joseph I,26 July 1678,17 April 1711,1 May 1705,N/A,17 April 1711 29,Habsburg,Charles VI,1 October 1685,20 October 1740,22 December 1711,N/A,20 October 1740 30,Wittelsbach,Charles VII,6 August 1697,20 January 1745,12 February 1742,N/A,20 January 1745 31,Lorraine,Francis I,8 December 1708,18 August 1765,N/A,N/A,18 August 1765 32,Habsburg-Lorraine,Joseph II,13 March 1741,20 February 1790,19 August 1765,N/A,20 February 1790 33,Habsburg-Lorraine,Leopold II,5 May 1747,1 March 1792,N/A,N/A,1 March 1792 34,Habsburg-Lorraine,Francis II,12 February 1768,2 March 1835,4 March 1792,N/A,6 August 1806 Ix,Dynasty,Name,Birth,Death,Coronation 1,Coronation 2,Ceased to be Emperor
N/A,Carolingian,Charles I,2 April 742,28 January 814,25 December 800,N/A,28 January 814
N/A,Carolingian,Louis I,778,20 June 840,11 September 813,5 October 816,20 June 840
N/A,Carolingian,Lothair I,795,29 September 855,5 April 823,N/A,29 September 855
N/A,Carolingian,Louis II,825,12 August 875,15 June 844,18 May 872,12 August 875
N/A,Carolingian,Charles II,13 June 823,6 October 877,29 December 875,N/A,6 October 877
N/A,Carolingian,Charles III,13 June 839,13 January 888,12 February 881,N/A,11 November 887
N/A,Widonid,Guy III,835,12 December 894,21 February 891,N/A,12 December 894
N/A,Widonid,Lambert I,880,15 October 898,30 April 892,N/A,15 October 898
N/A,Carolingian,Arnulph,850,8 December 899,22 February 896,N/A,8 December 899
N/A,Bosonid,Louis III,880,5 June 928,22 February 901,N/A,21 July 905
N/A,Unruoching,Berengar I,845,7 April 924,December 915,N/A,7 April 924
1,Ottonian,Otto I,23 November 912,7 May 973,2 February 962,N/A,7 May 973
2,Ottonian,Otto II,955,7 December 983,25 December 967,N/A,7 December 983
3,Ottonian,Otto III,980,23 January 1002,21 May 996,N/A,23 January 1002
4,Ottonian,Henry II,6 May 973,13 July 1024,14 February 1014,N/A,13 July 1024
5,Salian,Conrad II,990,4 June 1039,26 March 1027,N/A,4 June 1039
6,Salian,Henry III,29 October 1017,5 October 1056,25 December 1046,N/A,5 October 1056
7,Salian,Henry IV,11 November 1050,7 August 1106,31 March 1084,N/A,December 1105
8,Salian,Henry V,8 November 1086,23 May 1125,13 April 1111,N/A,23 May 1125
9,Supplinburg,Lothair III,9 June 1075,4 December 1137,4 June 1133,N/A,4 December 1137
10,Staufen,Frederick I,1122,10 June 1190,18 June 1155,N/A,10 June 1190
11,Staufen,Henry VI,November 1165,28 September 1197,14 April 1191,N/A,28 September 1197
12,Welf,Otto IV,1175,19 May 1218,4 October 1209,N/A,1215
13,Staufen,Frederick II,26 December 1194,13 December 1250,22 November 1220,N/A,13 December 1250
14,Luxembourg,Henry VII,1275,24 August 1313,29 June 1312,N/A,24 August 1313
15,Wittelsbach,Louis IV,1 April 1282,11 October 1347,17 January 1328,N/A,11 October 1347
16,Luxembourg,Charles IV,14 May 1316,29 November 1378,5 April 1355,N/A,29 November 1378
17,Luxembourg,Sigismund,14 February 1368,9 December 1437,31 May 1433,N/A,9 December 1437
18,Habsburg,Frederick III,21 September 1415,19 August 1493,19 March 1452,N/A,19 August 1493
19,Habsburg,Maximilian I,22 March 1459,12 January 1519,N/A,N/A,12 January 1519
20,Habsburg,Charles V,24 February 1500,21 September 1558,February 1530,N/A,16 January 1556
21,Habsburg,Ferdinand I,10 March 1503,25 July 1564,N/A,N/A,25 July 1564
22,Habsburg,Maximilian II,31 July 1527,12 October 1576,N/A,N/A,12 October 1576
23,Habsburg,Rudolph II,18 July 1552,20 January 1612,30 June 1575,N/A,20 January 1612
24,Habsburg,Matthias,24 February 1557,20 March 1619,23 January 1612,N/A,20 March 1619
25,Habsburg,Ferdinand II,9 July 1578,15 February 1637,10 March 1619,N/A,15 February 1637
26,Habsburg,Ferdinand III,13 July 1608,2 April 1657,18 November 1637,N/A,2 April 1657
27,Habsburg,Leopold I,9 June 1640,5 May 1705,6 March 1657,N/A,5 May 1705
28,Habsburg,Joseph I,26 July 1678,17 April 1711,1 May 1705,N/A,17 April 1711
29,Habsburg,Charles VI,1 October 1685,20 October 1740,22 December 1711,N/A,20 October 1740
30,Wittelsbach,Charles VII,6 August 1697,20 January 1745,12 February 1742,N/A,20 January 1745
31,Lorraine,Francis I,8 December 1708,18 August 1765,N/A,N/A,18 August 1765
32,Habsburg-Lorraine,Joseph II,13 March 1741,20 February 1790,19 August 1765,N/A,20 February 1790
33,Habsburg-Lorraine,Leopold II,5 May 1747,1 March 1792,N/A,N/A,1 March 1792
34,Habsburg-Lorraine,Francis II,12 February 1768,2 March 1835,4 March 1792,N/A,6 August 1806

1 Ix Dynasty Name Birth Death Coronation 1 Coronation 2 Ceased to be Emperor N/A Ceased to be Emperor Carolingian Charles I 2 April 742 28 January 814 25 December 800 N/A 28 January 814 N/A Carolingian Louis I 778 20 June 840 11 September 813 5 October 816 20 June 840 N/A Carolingian Lothair I 795 29 September 855 5 April 823 N/A 29 September 855 N/A Carolingian Louis II 825 12 August 875 15 June 844 18 May 872 12 August 875 N/A Carolingian Charles II 13 June 823 6 October 877 29 December 875 N/A 6 October 877 N/A Carolingian Charles III 13 June 839 13 January 888 12 February 881 N/A 11 November 887 N/A Widonid Guy III 835 12 December 894 21 February 891 N/A 12 December 894 N/A Widonid Lambert I 880 15 October 898 30 April 892 N/A 15 October 898 N/A Carolingian Arnulph 850 8 December 899 22 February 896 N/A 8 December 899 N/A Bosonid Louis III 880 5 June 928 22 February 901 N/A 21 July 905 N/A Unruoching Berengar I 845 7 April 924 December 915 N/A 7 April 924 1 Ottonian Otto I 23 November 912 7 May 973 2 February 962 N/A 7 May 973 2 Ottonian Otto II 955 7 December 983 25 December 967 N/A 7 December 983 3 Ottonian Otto III 980 23 January 1002 21 May 996 N/A 23 January 1002 4 Ottonian Henry II 6 May 973 13 July 1024 14 February 1014 N/A 13 July 1024 5 Salian Conrad II 990 4 June 1039 26 March 1027 N/A 4 June 1039 6 Salian Henry III 29 October 1017 5 October 1056 25 December 1046 N/A 5 October 1056 7 Salian Henry IV 11 November 1050 7 August 1106 31 March 1084 N/A December 1105 8 Salian Henry V 8 November 1086 23 May 1125 13 April 1111 N/A 23 May 1125 9 Supplinburg Lothair III 9 June 1075 4 December 1137 4 June 1133 N/A 4 December 1137 10 Staufen Frederick I 1122 10 June 1190 18 June 1155 N/A 10 June 1190 11 Staufen Henry VI November 1165 28 September 1197 14 April 1191 N/A 28 September 1197 12 Welf Otto IV 1175 19 May 1218 4 October 1209 N/A 1215 13 Staufen Frederick II 26 December 1194 13 December 1250 22 November 1220 N/A 13 December 1250 14 Luxembourg Henry VII 1275 24 August 1313 29 June 1312 N/A 24 August 1313 15 Wittelsbach Louis IV 1 April 1282 11 October 1347 17 January 1328 N/A 11 October 1347 16 Luxembourg Charles IV 14 May 1316 29 November 1378 5 April 1355 N/A 29 November 1378 17 Luxembourg Sigismund 14 February 1368 9 December 1437 31 May 1433 N/A 9 December 1437 18 Habsburg Frederick III 21 September 1415 19 August 1493 19 March 1452 N/A 19 August 1493 19 Habsburg Maximilian I 22 March 1459 12 January 1519 N/A N/A 12 January 1519 20 Habsburg Charles V 24 February 1500 21 September 1558 February 1530 N/A 16 January 1556 21 Habsburg Ferdinand I 10 March 1503 25 July 1564 N/A N/A 25 July 1564 22 Habsburg Maximilian II 31 July 1527 12 October 1576 N/A N/A 12 October 1576 23 Habsburg Rudolph II 18 July 1552 20 January 1612 30 June 1575 N/A 20 January 1612 24 Habsburg Matthias 24 February 1557 20 March 1619 23 January 1612 N/A 20 March 1619 25 Habsburg Ferdinand II 9 July 1578 15 February 1637 10 March 1619 N/A 15 February 1637 26 Habsburg Ferdinand III 13 July 1608 2 April 1657 18 November 1637 N/A 2 April 1657 27 Habsburg Leopold I 9 June 1640 5 May 1705 6 March 1657 N/A 5 May 1705 28 Habsburg Joseph I 26 July 1678 17 April 1711 1 May 1705 N/A 17 April 1711 29 Habsburg Charles VI 1 October 1685 20 October 1740 22 December 1711 N/A 20 October 1740 30 Wittelsbach Charles VII 6 August 1697 20 January 1745 12 February 1742 N/A 20 January 1745 31 Lorraine Francis I 8 December 1708 18 August 1765 N/A N/A 18 August 1765 32 Habsburg-Lorraine Joseph II 13 March 1741 20 February 1790 19 August 1765 N/A 20 February 1790 33 Habsburg-Lorraine Leopold II 5 May 1747 1 March 1792 N/A N/A 1 March 1792 34 Habsburg-Lorraine Francis II 12 February 1768 2 March 1835 4 March 1792 N/A 6 August 1806
2 N/A Carolingian Charles I 2 April 742 28 January 814 25 December 800 N/A 28 January 814
3 N/A Carolingian Louis I 778 20 June 840 11 September 813 5 October 816 20 June 840
4 N/A Carolingian Lothair I 795 29 September 855 5 April 823 N/A 29 September 855
5 N/A Carolingian Louis II 825 12 August 875 15 June 844 18 May 872 12 August 875
6 N/A Carolingian Charles II 13 June 823 6 October 877 29 December 875 N/A 6 October 877
7 N/A Carolingian Charles III 13 June 839 13 January 888 12 February 881 N/A 11 November 887
8 N/A Widonid Guy III 835 12 December 894 21 February 891 N/A 12 December 894
9 N/A Widonid Lambert I 880 15 October 898 30 April 892 N/A 15 October 898
10 N/A Carolingian Arnulph 850 8 December 899 22 February 896 N/A 8 December 899
11 N/A Bosonid Louis III 880 5 June 928 22 February 901 N/A 21 July 905
12 N/A Unruoching Berengar I 845 7 April 924 December 915 N/A 7 April 924
13 1 Ottonian Otto I 23 November 912 7 May 973 2 February 962 N/A 7 May 973
14 2 Ottonian Otto II 955 7 December 983 25 December 967 N/A 7 December 983
15 3 Ottonian Otto III 980 23 January 1002 21 May 996 N/A 23 January 1002
16 4 Ottonian Henry II 6 May 973 13 July 1024 14 February 1014 N/A 13 July 1024
17 5 Salian Conrad II 990 4 June 1039 26 March 1027 N/A 4 June 1039
18 6 Salian Henry III 29 October 1017 5 October 1056 25 December 1046 N/A 5 October 1056
19 7 Salian Henry IV 11 November 1050 7 August 1106 31 March 1084 N/A December 1105
20 8 Salian Henry V 8 November 1086 23 May 1125 13 April 1111 N/A 23 May 1125
21 9 Supplinburg Lothair III 9 June 1075 4 December 1137 4 June 1133 N/A 4 December 1137
22 10 Staufen Frederick I 1122 10 June 1190 18 June 1155 N/A 10 June 1190
23 11 Staufen Henry VI November 1165 28 September 1197 14 April 1191 N/A 28 September 1197
24 12 Welf Otto IV 1175 19 May 1218 4 October 1209 N/A 1215
25 13 Staufen Frederick II 26 December 1194 13 December 1250 22 November 1220 N/A 13 December 1250
26 14 Luxembourg Henry VII 1275 24 August 1313 29 June 1312 N/A 24 August 1313
27 15 Wittelsbach Louis IV 1 April 1282 11 October 1347 17 January 1328 N/A 11 October 1347
28 16 Luxembourg Charles IV 14 May 1316 29 November 1378 5 April 1355 N/A 29 November 1378
29 17 Luxembourg Sigismund 14 February 1368 9 December 1437 31 May 1433 N/A 9 December 1437
30 18 Habsburg Frederick III 21 September 1415 19 August 1493 19 March 1452 N/A 19 August 1493
31 19 Habsburg Maximilian I 22 March 1459 12 January 1519 N/A N/A 12 January 1519
32 20 Habsburg Charles V 24 February 1500 21 September 1558 February 1530 N/A 16 January 1556
33 21 Habsburg Ferdinand I 10 March 1503 25 July 1564 N/A N/A 25 July 1564
34 22 Habsburg Maximilian II 31 July 1527 12 October 1576 N/A N/A 12 October 1576
35 23 Habsburg Rudolph II 18 July 1552 20 January 1612 30 June 1575 N/A 20 January 1612
36 24 Habsburg Matthias 24 February 1557 20 March 1619 23 January 1612 N/A 20 March 1619
37 25 Habsburg Ferdinand II 9 July 1578 15 February 1637 10 March 1619 N/A 15 February 1637
38 26 Habsburg Ferdinand III 13 July 1608 2 April 1657 18 November 1637 N/A 2 April 1657
39 27 Habsburg Leopold I 9 June 1640 5 May 1705 6 March 1657 N/A 5 May 1705
40 28 Habsburg Joseph I 26 July 1678 17 April 1711 1 May 1705 N/A 17 April 1711
41 29 Habsburg Charles VI 1 October 1685 20 October 1740 22 December 1711 N/A 20 October 1740
42 30 Wittelsbach Charles VII 6 August 1697 20 January 1745 12 February 1742 N/A 20 January 1745
43 31 Lorraine Francis I 8 December 1708 18 August 1765 N/A N/A 18 August 1765
44 32 Habsburg-Lorraine Joseph II 13 March 1741 20 February 1790 19 August 1765 N/A 20 February 1790
45 33 Habsburg-Lorraine Leopold II 5 May 1747 1 March 1792 N/A N/A 1 March 1792
46 34 Habsburg-Lorraine Francis II 12 February 1768 2 March 1835 4 March 1792 N/A 6 August 1806