tutorial gui for español cmake

gui - ¿Cómo construir archivos de objetos solo una vez con cmake?



cmake tutorial español (3)

Tengo un archivo CMakeLists.txt que se ve así:

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)

Los archivos source1.o source2.o source3.o toman mucho tiempo en compilarse, y como son comunes a todos los ejecutables, quiero que cada uno de ellos se compile solo una vez. El comportamiento actual de cmake, sin embargo, es reconstruirlos para cada objetivo exec por separado, lo que es una duplicación innecesaria de esfuerzos.

¿Hay una manera de decirle a cmake que construya archivos de objetos solo una vez?


En las versiones recientes de CMake, puede utilizar una biblioteca de objetos. En general, se comportará como cualquier biblioteca, pero no la archivará en una biblioteca estática:

add_library(my_cpps OBJECT a.cpp b.cpp c.cpp)

A continuación, puede "vincularlo" a otros objetivos:

add_library(my_lib1 d.cpp e.cpp f.cpp) target_link_libraries(my_lib1 PUBLIC my_cpps) add_library(my_lib2 f.cpp g.cpp h.cpp) target_link_libraries(my_lib2 PUBLIC my_cpps)


No. Esto sería difícil de lograr ya que los archivos de origen podrían compilarse con diferentes opciones de compilación, pasos posteriores a la compilación, etc.

Lo que puedes hacer es colocar los archivos de objetos en una biblioteca estática y vincularlos con eso:

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

EDITAR: por supuesto, también puede ponerlo en una biblioteca compartida .


Sí, en CMake 2.8.8 puede usar una biblioteca de objetos, que es un tipo de biblioteca virtual que tiene las mismas propiedades de organización y dependencia de una biblioteca estática o compartida real, pero no produce un archivo en el disco. Ver CMake Tutorials: Object Library .