Estoy intentando que un archivo producido por un add_custom_command en un directorio sea una dependencia de un add_custom_command en otro directorio.cmake: luchando con las dependencias de add_custom_command
En el primer directorio (lib/núcleo) Tengo un comando de construcción que tiene este aspecto:
add_custom_command(
OUTPUT libcore.bc
COMMAND tartln -filetype=bc -link-as-library -o libcore.bc ${STDLIB_BC_FILES}
DEPENDS ${STDLIB_BC_FILES} tartln
COMMENT "Linking libcore.bc")
En el segundo directorio, tengo un comando que utiliza la salida de ese comando:
add_custom_command(OUTPUT ${OBJ_FILE}
COMMAND tartln -disable-fp-elim -filetype=obj -o ${OBJ_FILE} ${BC_FILE}
"${PROJECT_BINARY_DIR}/lib/core/libcore.bc"
MAIN_DEPENDENCY "${BC_FILE}"
DEPENDS "${PROJECT_BINARY_DIR}/lib/core/libcore.bc"
COMMENT "Linking Tart bitcode file ${BC_FILE}")
Sin embargo, cuando trato de instalar, me sale el siguiente error:
make[3]: *** No rule to make target `lib/core/libcore.bc', needed by `test/stdlib/ReflectionTest.o'. Stop.
Una cosa rara que veo es que la ruta en el mensaje de error es una ruta relativa, no absoluta, a pesar del hecho de que sé que $ {PROJECT_BINARY_DIR} es una ruta correcta y completa. No sé si esto es un problema o simplemente una rareza de la marca.
También he intentado hacer un objetivo de nivel superior de la biblioteca libcore, en el directorio lib/núcleo:
add_custom_target(libcore DEPENDS libcore.bc libcore.deps)
Y luego usar esa en la cláusula depende. Lo extraño de eso es que funciona la primera vez que haces una compilación limpia, pero da un error en cualquier compilación posterior. En cualquier caso, mi entendimiento es que DEPENDS se supone que solo funciona para las dependencias de archivos, por lo que esta no parece ser la solución correcta. (¿Cómo se tiene un comando personalizado que depende de un objetivo de nivel superior, entonces?)
También he intentado poner caminos absolutos en todas partes, sin efecto.
Lamentablemente, esta solución no funciona. (Me doy cuenta de que probablemente sea una respuesta inútil después de que haya transcurrido casi un año). Por lo que puedo decir, el parámetro DEPENDS de add_custom_command DEBE ser una dependencia de nivel de archivo, aunque los documentos dicen que hay una dependencia de nivel de destino * en el mismo directorio * funcionará, de hecho, probé muchas permutaciones diferentes en los últimos 11 meses, y ninguna de ellas funciona. Es decir, si defino el destino personalizado "foo" en el mismo directorio, y luego digo DEPENDS "foo", simplemente informará "sin reglas para hacer objetivo 'foo' ..." – Talin
@Talin Así que esto parece ser un error, ¿hay algún problema informado sobre esto en [CMake bugtracker] (http://www.cmake.org/Bug/my_view_page.php)? – lef