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/ -directory和gcc/g ++:"没有这样的文件或目录",但找不到我可以使用的任何解决方案.你能否建议我找到解决这个问题的合适方法?
编辑该示例可能具有误导性.在这个精简的示例中,我将所有源文件放在一个目录中,但在我的实际项目中,我有几个子目录,每个目录中有多个文件.因此,尽管cd荷兰国际集团的src目录在我上面的例子中的作品,它不会在我的实际项目工作(或至少,我想知道它是如何工作的).
您可以为实际的源文件提供第二个变量,如下所示:
FILES = Foo.cpp Bar.cpp
SOURCES = $(FILES:%.cpp=$(SRC_PATH)/%.cpp)
Run Code Online (Sandbox Code Playgroud)
然后,而不是使用FILES时建立你使用SOURCES.
| 归档时间: |
|
| 查看次数: |
12829 次 |
| 最近记录: |