我在很多文件夹中都有很多源文件..有没有办法一次性编译所有这些文件而不必命名它们?
我知道我可以说
g++ -o out *.cpp
但是当我尝试
时g++ -o out *.cpp folder/*.cpp
我收到错误。
这样做的正确方法是什么?我知道makefile可以实现,但是可以用直接的g ++来完成吗?
答案 0 :(得分:7)
通过指定folder/*.cpp
,您告诉g ++在folder
中编译cpp文件。这是对的。
您可能缺少的是告诉g ++在哪里找到那些cpp文件#include
的其他文件。
要执行此操作,请告诉编译器同样include
-I
这个目录:
g++ -o out -I ./folder *.cpp folder/*.cpp
在某些情况下,我让编译器忘记了root / current目录中的内容,因此我使用另一个-I
手动将其指定到当前目录.
g++ -o out -I . -I ./folder *.cpp folder/*.cpp
答案 1 :(得分:0)
因此,我遇到了这个问题,看到了上面的vscode任务,并管理了一个不同的解决方案。这将从同一目录中获取所有头文件和c文件。然后将使用F5键。
tasks.json
Dim tbl As Excel.Range
Dim WordApp As Word.Application
Dim myDoc As Word.Document
Dim WordTable As Word.Table
Application.ScreenUpdating = False
Application.EnableEvents = False
Set tbl = ThisWorkbook.Worksheets(Sheet1.ObservationListing).ListObjects("Table1").Range
On Error Resume Next
Set WordApp = GetObject(class:="Word.Application")
Err.Clear
If WordApp Is Nothing Then Set WordApp = CreateObject(class:="Word.Application")
If Err.Number = 429 Then
MsgBox "Microsoft Word could not be found, aborting."
GoTo EndRoutine
End If
On Error GoTo 0
WordApp.Visible = True
WordApp.Activate
Set myDoc = WordApp.Documents.Open("insert file pile here.docx")
tbl.Copy
myDoc.Paragraphs(1).Range.PasteExcelTable _
LinkedToExcel:=False, _
WordFormatting:=False, _
RTF:=False
Set WordTable = myDoc.Tables(1)
WordTable.AutoFitBehavior (wdAutoFitWindow)
EndRoutine:
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.CutCopyMode = False
End Sub```
答案 2 :(得分:0)
如果所有文件都包含各自的主文件,并且不属于同一项目/程序,则可能要保留其原始名称,并为每个文件创建一个可执行文件。在这种情况下,您可以使用awk
:
awk '{n=split(FILENAME, a, "."); outfile=sprintf("%s.out",a[n-1]); command=sprintf("g++ -I . %s -o %s", FILENAME, outfile); system(command); nextfile } ' *.cpp
首先,使用split
分隔文件名和扩展名,并将结果存储到数组a
中。基本名称位于索引n-1
,扩展名位于索引n
。因此,我们将扩展名更改为.out
,并使用sprintf
存储到outfile
变量中。同样,我们在外壳中创建要由system
函数执行的命令。
上述命令的最短版本是:
awk '{n=split(FILENAME, a, "."); command=sprintf("g++ -I . %s -o %s.out", FILENAME, a[n-1]); system(command); nextfile } ' *.cpp
您还可以按照@Bit Fracture的建议,使用#include
将命令修改为-I
的其他文件。
注意:如果任何文件名包含空格或多个点,则此解决方案将无法正常工作。在执行命令之前,这些字符需要用下划线替换,例如here:
find . -type f -name "* *.cpp" -exec bash -c 'mv "$0" "${0// /_}"' {} \;