2016-04-27 41 views
8

Ho alcuni file di intestazione in una sottodirectory, che devono essere copiati in una sottodirectory con lo stesso nome nella mia directory di inclusione. Posso utilizzare il prefisso nobase per realizzare questo obiettivo (sto lavorando con il codice di Heimdal, FYI):Come utilizzare gli autotools nobase e prefissi nodisti insieme su include_HEADERS

nobase_include_HEADERS = hcrypto/aes.h \ 
     hcrypto/bn.h  \ 
     hcrypto/cmac.h \ 
     hcrypto/des.h  \ 
     hcrypto/dh.h  \ 
     hcrypto/dsa.h  \ 
etc... 

Ma alcuni di questi file di intestazione vengono generati durante il processo di compilazione (dal heimdal deve essere costruito prima di quelli di intestazione i file esistono), quindi ho bisogno di usare il prefisso nodista in modo che il dist non muoia.

I found an article che ha detto loro sia potrei usare insieme, e anche fornito un esempio simile, così ho fatto questo:

nobase_nodist_include_HEADERS = hcrypto/aes.h \ 
     hcrypto/bn.h  \ 
     hcrypto/cmac.h \ 
     hcrypto/des.h  \ 
     hcrypto/dh.h  \ 
     hcrypto/dsa.h  \ 
etc... 

non ho notato eventuali avvisi o errori, ma i file di intestazione non si ottiene copiato nella mia directory di inclusione. Sto facendo qualcosa di sbagliato, o c'è un bug negli autotools?

Interessante, se invertire i prefissi, ottengo questo errore:

Makefile.am:93: error: 'nodist_nobase_include_HEADERS' is used but 'nobase_includedir' is undefined 

La ragione di tale errore è spiegato qui in automake documentation:

‘nobase_’ should be specified first when used in conjunction with either ‘dist_’ or ‘nodist_’

Ho anche definito nodist_include_HEADERS (che funziona). Forse le due definizioni stanno causando un qualche tipo di conflitto?

Ho appena provato a rimuovere nodist_include_HEADERS e a mettere tutte le mie intestazioni sotto la linea nobase_nodist_include_HEADERS, ma ora NONE le mie intestazioni vengono installate.

Automake e informazioni di sistema: automake (GNU automake) 1.13.4 openSUSE 13.2 (x86_64)

+0

per favore aggiungi qualsiasi informazione aggiuntiva alla domanda stessa, piuttosto che abusare di alcuni commenti. –

+0

Per favore, crea un esempio operativo completo mimetico http://stackoverflow.com/help/mcve (Una piccola raccolta di Makefile.am nel tuo caso) –

risposta

3

Se le intestazioni sono stati generati da un programma, si dovrebbe contrassegnare con BUILT_SOURCES, in questo modo automake non sarà confuso per provare a installarli come dist.

In secondo luogo, per i file di intestazioni che non si intende installare, è preferibile utilizzare la direttiva SOURCES anziché HEADERS. Prova questo:

nobase_include_SOURCES += hcrypto/aes.h \ 
    hcrypto/bn.h  \ 
    hcrypto/cmac.h \ 
    hcrypto/des.h  \ 
    hcrypto/dh.h  \ 
    hcrypto/dsa.h 
BUILT_SOURCES = hcrypto/aes.h \ 
    hcrypto/bn.h  \ 
    hcrypto/cmac.h \ 
    hcrypto/des.h  \ 
    hcrypto/dh.h  \ 
    hcrypto/dsa.h