【发布时间】:2012-11-30 05:15:57
【问题描述】:
我正在尝试使用 makefile 为我正在开发的 C++ 插件设置构建过程。我很想知道是否有任何方法可以让 g++ 编译在另一个目录中找到的 source 文件。我这样做的动机是避免必须为每个源文件指定相对路径,如下所述。
我的项目目录结构如下:
MyPlugin --> src --> Foo.cpp
--> Foo.h
--> Bar.cpp
--> Bar.cpp
--> build --> Makefile
以下是我当前 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
通过这样做,我试图避免将FILES 变量定义如下:
FILES=../src/Foo.cpp ../src/Bar.cpp
当我尝试运行make all 时,g++ 给了我一个错误。看来-I标志指定的路径只用于搜索#included文件。
g++: Foo.cpp: No such file or directory
g++: Bar.cpp: No such file or directory
我不能使用通配符 (*.cpp),因为我并不总是希望提取所有文件进行编译。另一种选择是cd 到 src 目录,如提到的here,然后从那里运行 g++,但这仅适用于我如果所有文件都在同一目录中(我需要输出为单个 @987654334 @ 文件)。我也试过设置环境变量PATH,但这似乎没有任何效果。
我查看了 g++ 帮助、make 文档,并查看了 StackOverflow 帖子,例如 https://stackoverflow.com/questions/10010741/g-compile-with-codes-of-base-class-in-a-separate-directory 和 gcc/g++: "No such file or directory" ,但找不到任何我可以使用的解决方案。你能建议我一个合适的方法来解决这个问题吗?
编辑 该示例可能具有误导性。在这个精简的示例中,我将所有源文件放在一个目录中,但在我的实际项目中,我有几个子目录,每个目录中有多个文件。因此,虽然cding 到src 目录在我上面的示例中有效,但它在我的实际项目中不起作用(或者至少,我想知道它是如何工作的)。
【问题讨论】:
-
为什么输出是单个 .so 文件会阻碍您 cd 进入
src目录? -
就像我提到的,只有在所有源文件都在同一个目录中时才有效。我希望将所有源文件一起编译成一个 .so 文件。