我在许多文件夹中有许多源文件..有没有办法一次性编译所有这些文件而不必命名它们?
我知道我可以说
g++ -o out *.cpp
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试
g++ -o out *.cpp folder/*.cpp
Run Code Online (Sandbox Code Playgroud)
我收到一个错误.
这样做的正确方法是什么?我知道有可能使用makefile,但它可以用直接的g ++完成吗?
通过指定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)
弄清楚了!:) 我讨厌为了编译我的代码而不得不使用 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/评论)