En CMake, intento crear un proyecto que incluya bibliotecas para múltiples arquitecturas de procesador diferentes, compiladas por diferentes cadenas de herramientas. Para cada arquitectura, las bibliotecas estáticas se crean en múltiples subdirectorios y luego se recopilan en una biblioteca compartida en el directorio raíz. Hasta ahora, no he podido resolver esto.CMake add_custom_command/_target en diferentes directorios para la compilación cruzada
Lo más cerca que he llegado hasta ahora es utilizar add_custom_command
y add_custom_target
en los subdirectorios para producir los archivos .a y luego tratar de reunirlas en un .so en el directorio raíz usando add_custom_command
y add_custom_target
nuevo. Pero si establezco el punto de dependencia .so en la lista de salidas de comando personalizadas, el archivo MAKE dice "No hay regla que hacer ..." porque las salidas de comando personalizadas no se exportan fuera del subdirectorio. Así que intenté hacer que el punto de dependencia .so fuera la lista de objetivos personalizados en el subdirectorio, y se queja de que no puede encontrar un archivo con ese nombre.
Para decirlo en forma de código, esto es lo que tengo en un subdirectorio:
add_custom_command(OUTPUT subout.a COMMAND ${MYAR} ...)
add_custom_target(subout_target DEPENDS subout.a)
En el directorio raíz, he intentado esto:
add_custom_command(OUTPUT my.so COMMAND ${MYLD} ... DEPENDS sub/subout.a)
add_custom_target(dll ALL DEPENDS my.so)
Y consigo "No hay ninguna regla para hacer el objetivo 'sub/subout.a', que necesita 'my.so'. Detener. " Lo cual tiene sentido porque los destinos add_custom_command
no se exportan desde un directorio.
Y he intentado esto:
add_custom_command(OUTPUT my.so COMMAND ${MYLD} ... DEPENDS subout_target)
add_custom_target(dll ALL DEPENDS my.so)
Esto realmente hacer que el archivo de sub/subout.a que se genere, pero luego se muere, diciendo "No hay ninguna regla para hacer diana 'subout_target' ..."
Creo que lo que realmente quiero es poder imitar el comportamiento add_library
para múltiples arquitecturas diferentes. Pero aparentemente, CMake no quiere que haga eso ... :)
¿Alguna idea?
Eso lo arregló por completo. Muchas gracias. Me has ahorrado mucha frustración. – boiler96
¡Estoy contento y bienvenido! – mloskot