LINUX.ORG.RU

ninja — пропустить цель

 , , ,


0

3

Использую ninja для сборки (генерирую файл ninja.build при помощи cmake).
Случается такое, что какая-то цель не собирается. Тогда я ручками её собираю, обычный make такое бы проглотил, но ninja не такой — он пытается собрать ещё раз, не смотря на то, что файл с таким именем уже создан.
Как заставить ninja пропустить эту цель? Может, можно его как-то заставить думать, что он её уже собрал?

Если не очень понятно:

$ ninja
gcc -fPIC -shared -Wrongarg myfile.o -o lib/MyFile.so
build failed on target lib/MyFile.so
$ gcc -fPIC -shared -Correctarg myfile.o -o lib/MyFile.so
$ ls lib/MyFile.so
lib/MyFile.so
$ ninja
gcc -fPIC -shared -Wrongarg myfile.o -o lib/MyFile.so
build failed on target lib/MyFile.so

★★★★★

Случается такое, что какая-то цель не собирается.

Так может нужно сделать, чтобы собиралась ?

Как заставить ninja пропустить эту цель?
Может, можно его как-то заставить думать, что он её уже собрал?

Нет и нет, если следовать документации на ninja.

dhampire ★★★
()
Ответ на: комментарий от dhampire

Ну, я и сделал.
Было:

FAILED: : && /home/myuser/ellcc/bin/ecc++  -fPIC -fPIC -fvisibility-inlines-hidden -Wall -W -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -pedantic -Wno-long-long -Wcovered-switch-default -Wnon-virtual-dtor -Wno-comment -std=c++11 -fcolor-diagnostics -ffunction-sections -fdata-sections  -Wl,-O3 -Wl,--gc-sections  -Wl,--version-script,/home/myuser/ellcc/clang/llvm-build/lib/Transforms/Hello/LLVMHello.exports -shared -Wl,-soname,LLVMHello.so -o lib/LLVMHello.so lib/Transforms/Hello/CMakeFiles/LLVMHello.dir/Hello.cpp.o  -Wl,-rpath,«\$ORIGIN/../lib» && :
Стало:
/home/myuser/ellcc/bin/ecc-ld  -fPIC -fPIC -fvisibility-inlines-hidden -fcolor-diagnostics -ffunction-sections -fdata-sections  -O3 --gc-sections  --version-script /home/myuser/ellcc/clang/llvm-build/lib/Transforms/Hello/LLVMHello.exports -shared -soname LLVMHello.so -o lib/LLVMHello.so lib/Transforms/Hello/CMakeFiles/LLVMHello.dir/Hello.cpp.o
И всё хорошо слинковалось. Только беда в том, что я выполнил эту команду, а не превратил её в ниндзевское заклинание.
В итоге у меня получается хорошая библиотека, но ninja её всё равно хочет пересобрать.
Я сейчас просто удаляю цели из build.ninja, но понимаю, что это неверный метод.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от CYB3R

Может, лучше править CMakeLists.txt, а не сгенерированный по нему файл? Если это твой косяк, то я бы его искал там.

devsdc ★★
()
ninja -k 2

А вообще, у тебя скорее всего где то зависимости в CMake файлах неверно указанны, как сказал товарищь выше.

Хотя, вообще, поделие хоть и шустрое до безобразия, но нифига не безбажное, завести его с distcc мне так просто не удалось.

pon4ik ★★★★★
()
Последнее исправление: pon4ik (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.