Используя простой сценарий структуры папок с папкой проекта, где в этом корне находится сборка и папка источников:
project
- build
- sources
В папке источников находится hello.cpp:
#include <iostream>
using namespace std;
int main() {
cout << "Hello world!\n";
}
и Makefile:
SOURCE_DIRECTORIES = ../ch1
vpath %.cpp $(SOURCE_DIRECTORIES)
hello: hello.cpp
g++ ${SOURCE_DIRECTORIES}/hello.cpp -o hello
Я запускаю вот так из папки сборки:
make -f ../sources/Makefile
Вышеописанное работает, но vpath не так полезен. Даже с vpath я должен добавить путь SOURCE_DIRECTORIES в командной строке. Я мог бы также не использовать vpath и просто использовать $ (SOURCE_DIRECTORIES), где это необходимо.
Это также немного хрупко, поскольку папка сборки должна находиться на том же уровне, что и папка источников. Но я могу жить с этим.
Это лучший подход? Я думаю, что должен быть лучший способ сделать это.