2009-09-07 14 views
16

Ho un file CMakeLists.txt che assomiglia a questo:Come creare file oggetto solo una volta con cmake?

add_executable(exec1 exec1.c source1.c source2.c source3.c) 
add_executable(exec2 exec2.c source1.c source2.c source3.c) 
add_executable(exec3 exec3.c source1.c source2.c source3.c) 

Il source1.o source2.o source3.o file occupano un sacco di tempo per costruire, e dal momento che sono comuni a tutti gli eseguibili, Voglio che ognuno di loro venga costruito una sola volta. Il comportamento corrente per cmake, tuttavia, è di ricostruirli separatamente per ciascun obiettivo exec, il che rappresenta un'inutile duplicazione degli sforzi.

C'è un modo per dire a cmake di creare file oggetto solo una volta?

risposta

15

No. Questo sarebbe difficile da realizzare, poiché i file di origine potrebbero essere compilati con differenti opzioni del compilatore, post-generazione gradini, ecc

Che cosa si può fare è di mettere i file oggetto in una libreria statica e collegamento con che invece:

add_library(mylib STATIC source1.c source2.c) 
add_executable(myexe source3.c) 
target_link_libraries(myexe mylib) 

EDIT: ovviamente, si può mettere in un condiviso biblioteca pure.

+3

Prenditi cura di questo approccio. Le librerie condivise potrebbero essere più amichevoli se ci sono molti exe coinvolti http://blog.flameeyes.eu/2008/01/21/what-to-do-with-shared-code – richq

+2

Sì, certo. Penso che ho appena pensato che l'OP voleva che il codice fosse duplicato in ognuno degli eseguibili. – JesperE

12

Sì, in CMake 2.8.8 è possibile utilizzare una libreria di oggetti, che è una sorta di libreria virtuale che ha le stesse proprietà organizzative e di dipendenza di una libreria statica o condivisa reale, ma non produce un file su disco. Vedi Tutorial CMake: Object Library.

Problemi correlati