gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:19:58 26 4
gpt4 key购买 nike

我正在尝试使用 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++,但这只适用于所有文件都在同一目录中的情况(我需要输出为单个 .so 文件)。我也尝试设置环境变量 PATH,但似乎没有任何效果。

我查看了 g++ 帮助、make 文档,并查看了 StackOverflow 帖子,例如 https://stackoverflow.com/questions/10010741/g-compile-with-codes-of-base-class-in-a-separate-directorygcc/g++: "No such file or directory" ,但找不到我可以使用的任何解决方案。你能建议我一个合适的方法来解决这个问题吗?

编辑 该示例可能具有误导性。在这个精简的示例中,我将所有源文件都放在一个目录中,但在我的实际项目中,我有几个子目录,每个目录中有多个文件。因此,虽然 cding 到 src 目录在我上面的例子中有效,但它在我的实际项目中不起作用(或者至少,我想知道它是如何工作的)会工作)。

最佳答案

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

FILES = Foo.cpp Bar.cpp
SOURCES = $(FILES:%.cpp=$(SRC_PATH)/%.cpp)

然后在构建时使用 SOURCES 而不是使用 FILES

关于c++ - g++ 编译存在于另一个目录中的源文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13639443/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com