2012-03-11 7 views
6

He usado GNU autoconf para generar un script de configuración para un programa mío, que ahora estoy tratando de compilar de forma cruzada para Windows.Indique a un script de configuración que use una ruta relativa para --datarootdir

En Linux, para cambiar la ubicación de los archivos de datos, proporciono --datarootdir=/blah que funciona bien. En Windows, sin embargo, la ruta de mi aplicación no se conocerá hasta el tiempo de ejecución (ya que el usuario puede elegir instalarla en cualquier lugar). Por lo tanto, quiero configurar el directorio de datos para que sea el directorio actual, donde sea que esté en ese momento. es lanzado.

Desafortunadamente, pasando --datarootdir=. no funciona:

configure: error: expected an absolute directory name for --datarootdir: . 

, ¿cómo saber Autoconf/configure que desea una ruta relativa al directorio actual en tiempo de ejecución?

Respuesta

3

Creo que he encontrado una solución parcial para esto. Parece que --datarootdir se usa para controlar dónde están los archivos instalados, por lo que debe ser una ruta absoluta en beneficio de make install. Sin embargo, puede ser anulado durante la compilación:

make datadir="." 

De esta manera, durante la compilación del código piensa que la $(datadir) es "" pero cuando se ejecuta make install los archivos están siendo colocados en la ruta absoluta dada a ./configure --datarootdir=...

+0

Por supuesto, he puesto dado cuenta de que esto no es Tampoco es la mejor solución. Al iniciar el .exe directamente, funciona bien (.exe está en el directorio actual), pero al hacer doble clic en un archivo de documento asociado con la aplicación, el .exe se inicia desde el directorio del archivo del documento, lo que significa que los archivos de datos no pueden se encuentra ... – Malvineous

1

Simplemente darle una ruta absoluta que es igual al directorio de trabajo actual:

./configure --datarootdir=$PWD 
+0

El problema es que si un usuario elige instalar mi aplicación en el sistema de destino en C: \ Archivos de programa, y ​​otra en D: \ Apps, el datarootdir será diferente entre los dos. $ PWD solo será preciso en tiempo de compilación, mientras que necesito que el valor sea relativo al directorio actual de tiempo de ejecución. – Malvineous

Cuestiones relacionadas