¿Cómo obtener el directorio relativo actual de su Makefile?

Resuelto boltup_im_coding asked hace 11 años • 14 respuestas

Tengo varios Makefiles en directorios específicos de aplicaciones como este:

/project1/apps/app_typeA/Makefile
/project1/apps/app_typeB/Makefile
/project1/apps/app_typeC/Makefile

Cada Makefile incluye un archivo .inc en esta ruta un nivel más arriba:

/project1/apps/app_rules.inc

Dentro de app_rules.inc estoy configurando el destino donde quiero que se coloquen los archivos binarios cuando se construyan. Quiero que todos los binarios estén en su respectiva app_typeruta:

/project1/bin/app_typeA/

Intenté usar$(CURDIR) , así:

OUTPUT_PATH = /project1/bin/$(CURDIR)

pero en lugar de eso, conseguí los binarios enterrados en el nombre completo de la ruta de esta manera: (observe la redundancia)

/project1/bin/projects/users/bob/project1/apps/app_typeA

¿Qué puedo hacer para obtener el "directorio actual" de ejecución para poder saber exactamente cómo app_typeXcolocar los archivos binarios en sus respectivas carpetas de tipos?

boltup_im_coding avatar Aug 09 '13 05:08 boltup_im_coding
Aceptado

La función del caparazón.

Puedes utilizar shellla función: current_dir = $(shell pwd). O shellen combinación con notdir, si no necesita una ruta absoluta: current_dir = $(notdir $(shell pwd)).

Actualizar.

La solución dada solo funciona cuando se ejecuta makedesde el directorio actual del Makefile.
Como señaló @Flimm:

Tenga en cuenta que esto devuelve el directorio de trabajo actual, no el directorio principal del Makefile.
Por ejemplo, si ejecuta cd /; make -f /home/username/project/Makefile, la current_dirvariable será /, no /home/username/project/.

El siguiente código funcionará para Makefiles invocados desde cualquier directorio:

mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST)))
current_dir := $(notdir $(patsubst %/,%,$(dir $(mkfile_path))))
Nikolai Popov avatar Aug 08 '2013 22:08 Nikolai Popov

Tomado de aquí ;

ROOT_DIR:=$(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))

Aparece como;

$ cd /home/user/

$ make -f test/Makefile 
/home/user/test

$ cd test; make Makefile 
/home/user/test
SleepyCal avatar Apr 27 '2014 14:04 SleepyCal