Esistono utility che utilizzano un compilatore esistente aggiungendo un comando come prefisso (quindi, anziché chiamare cc -c file.c
, è possibile chiamare distcc cc -c file.c
).Utilizzo dei comandi del prefisso del compilatore con CMake (distcc, ccache)
Quando si utilizza il comando CMake compilatore può essere cambiato, ma mi sono imbattuto in problemi cercando di utilizzare distcc
, anche se questo sarebbe probabilmente applica a qualsiasi prefisso comando per il compilatore (ccache
troppo).
CMake si aspetta che il compilatore di essere un percorso assoluto,
quindi impostandoCMAKE_C_COMPILER
-/usr/bin/distcc /usr/bin/cc
, dà un errore:/usr/bin/distcc /usr/bin/cc is not a full path to an existing compiler tool.
- Impostazione del compilatore di
/usr/bin/distcc
eCMAKE_C_COMPILER_ARG1
oCMAKE_C_FLAGS
per iniziare con/usr/bin/cc
funziona in alcuni casi, ma fallisce conCHECK_C_SOURCE_COMPILES
(controllato se C'era un modo per supportare questo, anche il prefissoCMAKE_REQUIRED_FLAGS
non funzionava).
L'unico modo che ho trovato per farlo è quello di avvolgere i comandi in uno script di shell.
#!/bin/sh
exec /usr/bin/distcc /usr/bin/cc "[email protected]"
Anche se questo funziona, Sarebbe bello essere in grado di utilizzare gli helper del compilatore con CMake, senza dover andare anche se gli script di shell (dando qualche piccolo overhead quando il sistema di generazione potrebbe utilizzare un prefisso di comando).
Quindi la mia domanda è:
Può CMake utilizzare i comandi prefisso compilatore (come distcc) direttamente ?, senza wrapper script di shell?
sta impostando i tuoi '/' variabili d'ambiente CXX' cc' quando si chiama cmake (ad esempio 'CC = "distcc gcc" cmake ..') insufficiente per qualche motivo? –
@Iskar Jarak, Questo funziona! (quindi immagino che questa possa essere la risposta). È interessante notare che internamente utilizza 'CMAKE_C_COMPILER' per il primo comando e' CMAKE_C_COMPILER_ARG1' per il secondo. Non sono sicuro di cosa stia succedendo - perché ho provato ad impostarli già in cmake-gui e 'CMAKE_C_COMPILER_ARG1' è stato ignorato con' CHECK_C_SOURCE_COMPILES'. – ideasman42
Felice che funzioni. L'impostazione della variabile d'ambiente probabilmente imposta anche altre cose, cose che usano 'CHECK_C_SOURCE_COMPILES' ... anche se non sono al 100% cosa ... ed è per questo che fare scherzi con le singole variabili in CMake è un tale dolore al collo. –