如何编译目录中的所有cpp文件?

Cap*_*man 5 g++

我在许多文件夹中有许多源文件..有没有办法一次性编译所有这些文件而不必命名它们?

我知道我可以说

g++ -o out *.cpp 
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试

g++ -o out *.cpp folder/*.cpp
Run Code Online (Sandbox Code Playgroud)

我收到一个错误.

这样做的正确方法是什么?我知道有可能使用makefile,但它可以用直接的g ++完成吗?

Bit*_*ure 9

通过指定folder/*.cpp你告诉g ++编译cpp文件folder.那是正确的.

你可能缺少的是告诉g ++在哪里找到那些cpp文件的附加文件#include.

为此,请告诉编译器include该目录也是-I这样的:

g++ -o out -I ./folder *.cpp folder/*.cpp
Run Code Online (Sandbox Code Playgroud)

在某些情况下,我让编译器忘记了root/current目录中的内容,因此我手动将其指定-I给当前目录.

g++ -o out -I . -I ./folder *.cpp folder/*.cpp
Run Code Online (Sandbox Code Playgroud)


And*_*rew 7

弄清楚了!:) 我讨厌为了编译我的代码而不得不使用 make 或构建系统的想法,但我想将我的代码分成子文件夹以保持它的整洁和有条理。

运行这个(替换 RootFolderName(例如用.)和 OutputName):

g++ -g $(find RootFolderName -type f -iregex ".*\.cpp") -o OutputName
Run Code Online (Sandbox Code Playgroud)

find 命令将对-iregex文件 ( -type f) 执行不区分大小写的递归正则表达式搜索( )。内放置这种$()然后将注入的结果到您的g++电话。美丽的!:)

当然,请确保您使用的是正确的命令;您可以随时进行试运行。


对于那些使用 Visual Studio Code 进行编译的人,我必须在args: []任务的 tasks.json中执行以下操作"command": "g++"

"-g",
"$(find",
"code",
"-type",
"f",
"-iregex",
"'.*\\.cpp')",
"-o",
"program"
Run Code Online (Sandbox Code Playgroud)

(否则它会将$()所有内容括在单引号中。)


(感谢:user405725 @ /sf/answers/683488361/评论)

  • 谢谢你的提示。要从 vscode 递归编译当前文件夹中的所有 cpp 文件,我必须稍微修改tasks.json 文件中的 args 字段为 `["-g", "$(find", "${fileDirname}", "-type" 、“f”、“-iregex”、“'.*\\.cpp')”、“-o”、“${fileDirname}/${fileBasenameNoExtension}”]`。这里的关键点是变量 `fileDirname` 表示当前文件的父文件夹,`fileBasenameNoExtension` 表示当前文件的名称,不带扩展名(在 Windows 上可能需要添加 .exe) (2认同)