Так что это немного грязно, однако у меня есть один файл .cpp, который я хочу использовать двумя различными способами; как класс c, вызываемый классом java с использованием JNI, и как отдельная программа c. Причина этого в том, что этот код перемещается между машинами, и иногда я хочу просто запустить и скомпилировать код c ++ напрямую, а не запускать Java и запускать его Java. (В коде c ++ есть метод main, который запускается только в автономной версии).
Так что в любом случае у меня есть файл (test.cpp) и исходный код Java, который идет с ним (test.java) в / home / user / dev / javajni /. Тем не менее, я также хочу иметь возможность скомпилировать его как автономный в / home / user / dev / standalone /. В автономном каталоге у меня есть файл make, который компилирует только программу c.
В любом случае, когда я делаю жесткую ссылку на файл в javajni внутри отдельного каталога, make-файл не видит его или отказывается видеть жесткую ссылку.
make: *** No rule to make target `test.cpp', needed by `test'. Stop.
И в то время как в автономном каталоге я использую:
ln /home/user/dev/javajni/test.cpp test.cpp
Но когда я копирую весь файл поверх, он работает нормально.
Подумаешь? Не является ли оригинальный файл в исходном месте технически просто жесткой ссылкой на инод? Я просто хочу иметь возможность изменять файл в одном месте без необходимости копировать и вставлять его туда и обратно.
Если это вообще полезно, то так выглядит мой make-файл:
EX=test
all: $(EX)
.cpp.o:
g++ -c -O3 -Wall $<
clean:
rm -f $(EX) *.o *.atest:test.cpp; g++ -Wall -o $@ $^
(Кстати, я изменил имя файла и каталогов в этом посте для упрощения)
Задача ещё не решена.
Других решений пока нет …