В CMake я пытаюсь создать проект, который включает в себя библиотеки для разных архитектур процессоров, скомпилированные разными инструментальными цепочками. Для каждой архитектуры статические библиотеки создаются в нескольких подкаталогах, а затем собираются в общую библиотеку в корневом каталоге. До сих пор я не смог понять это.
Самое близкое, что я до сих пор сделал, - это использование add_custom_command
и add_custom_target
в подкаталогах для создания файлов .a, а затем попытка собрать их в .so в корневом каталоге, используя add_custom_command
и * Снова 1006 *. Но если я указываю точку .so на список выходных данных пользовательской команды, то в make-файле будет указано «Нет правила для создания ...», поскольку выходные данные пользовательской команды не экспортируются из подкаталога. Поэтому я попытался сделать так, чтобы зависимость .so указывала на список пользовательских целей в подкаталоге, и он жалуется, что не может найти файл с таким именем.
Чтобы поместить это в форму кода, вот что у меня есть в подкаталоге:
add_custom_command(OUTPUT subout.a COMMAND ${MYAR} ...)
add_custom_target(subout_target DEPENDS subout.a)
В корневом каталоге я пробовал это:
add_custom_command(OUTPUT my.so COMMAND ${MYLD} ... DEPENDS sub/subout.a)
add_custom_target(dll ALL DEPENDS my.so)
И я получаю «Нет правила для создания цели« sub / subout.a », необходимой для« my.so ». Stop». Это имеет смысл, поскольку цели add_custom_command
не экспортируются из каталога.
И я попробовал это:
add_custom_command(OUTPUT my.so COMMAND ${MYLD} ... DEPENDS subout_target)
add_custom_target(dll ALL DEPENDS my.so)
Это фактически приведет к генерации файла sub / subout.a, но затем он умрет, сказав: «Нет правила для создания цели 'subout_target' ..."
Я думаю, что я действительно хочу, чтобы иметь возможность имитировать поведение add_library
для нескольких различных архитектур. Но, видимо, CMake не хочет, чтобы я это делал ...:)
Есть идеи?