g ++编译存在于另一个目录中的源文件

Mas*_*Man 4 c++ gcc makefile g++

我正在尝试使用makefile设置一个构建过程,用于我正在处理的C++插件.我很想知道是否有办法在另一个目录中找到g ++编译文件.我这样做的动机是避免必须为每个源文件指定相对路径,如下所述.

我的项目目录结构如下:

MyPlugin --> src   --> Foo.cpp
                   --> Foo.h
                   --> Bar.cpp
                   --> Bar.cpp
         --> build --> Makefile
Run Code Online (Sandbox Code Playgroud)

以下是我当前Makefile的精简版:

SRC_PATH=../src
OUT_PATH=../bin
VPATH=${SRC_PATH}
FILES=Foo.cpp Bar.cpp

CC=g++
CFLAGS=-Wall -shared

all:
    mkdir -p ${OUT_PATH}
    ${CC} ${CFLAGS} -I${SRC_PATH} ${FILES} -o ${OUT_PATH}/MyPlugin.so
Run Code Online (Sandbox Code Playgroud)

通过这样做,我试图避免定义FILES变量如下:

FILES=../src/Foo.cpp ../src/Bar.cpp
Run Code Online (Sandbox Code Playgroud)

当我尝试运行时make all,g ++给了我一个错误.看起来通过-Iflag 指定的路径仅用于搜索#included文件.

g++: Foo.cpp: No such file or directory
g++: Bar.cpp: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我不能使用通配符(*.cpp)因为我并不总是希望拾取所有文件进行编译.另一种方法是cdsrc目录,提到这里,并从那里运行G ++,但只适用于我,如果所有文件在同一目录下(我需要的输出是一个单一的.so文件).我也试过设置环境变量PATH,但似乎没有任何影响.

我查看了g ++帮助,make文档,并查看了StackOverflow帖子,例如/sf/ask/700751901/ -directorygcc/g ++:"没有这样的文件或目录",但找不到我可以使用的任何解决方案.你能否建议我找到解决这个问题的合适方法?

编辑该示例可能具有误导性.在这个精简的示例中,我将所有源文件放在一个目录中,但在我的实际项目中,我有几个子目录,每个目录中有多个文件.因此,尽管cd荷兰国际集团的src目录在我上面的例子中的作品,它不会在我的实际项目工作(或至少,我想知道它是如何工作的).

Som*_*ude 7

您可以为实际的源文件提供第二个变量,如下所示:

FILES = Foo.cpp Bar.cpp
SOURCES = $(FILES:%.cpp=$(SRC_PATH)/%.cpp)
Run Code Online (Sandbox Code Playgroud)

然后,而不是使用FILES时建立你使用SOURCES.