【发布时间】:2021-10-13 17:14:47
【问题描述】:
我是 VS Code 和 C++ 的新手,遇到了奇怪的问题。我已经搜索了所有内容,但无法解决。我从我自己的 src/include 文件夹中包含一个文件。我确实遇到了致命错误,但如果我手动将包含路径添加到 Makefile,代码编译得很好!不知何故,我无法为预处理步骤正确设置路径,但在编译时它就很好了。下面是编译输出的sn-p和其他结构:
**$ make**
src/main2.cpp:1:10: fatal error: 'main2.h' file not found
#include "main2.h"
^~~~~~~~~
1 error generated.
src/main.cpp:2:10: fatal error: 'main2.h' file not found
#include "main2.h"
^~~~~~~~~
1 error generated.
g++ -Isrc/include -g -O0 -Wall -Wextra -Wshadow -Wnon-virtual-dtor -pedantic -o obj/main.o -c src/main.cpp
g++ -Isrc/include -g -O0 -Wall -Wextra -Wshadow -Wnon-virtual-dtor -pedantic -o obj/main2.o -c src/main2.cpp
g++ -g -O0 -Wall -Wextra -Wshadow -Wnon-virtual-dtor -pedantic -o myapp obj/main.o obj/main2.o
**$ ./myapp**
Hello, world!
Inside test!!
**src/main.cpp**
#include <iostream>
#include "main2.h"
int main()
{
std::cout<<"Hello, world!" << std::endl;
test();
return 0;
}
**src/main2.cpp**
#include "main2.h"
#include <iostream>
void test(void)
{
std::cout<<"Inside test!!"<<std::endl;
}
**src/include/main2.h**
#ifndef MAIN2_H
#define MAIN2_H
#include <iostream>
void test(void);
#endif
如果我不在我的 Makefile 中添加以下行,那么我将无法像上一个一样运行和构建。步骤
INC=-I$(SRCDIR)/include
# Building rule for .o files and its .c/.cpp in combination with all .h
$(OBJDIR)/%.o: $(SRCDIR)/%$(EXT)
$(CC) $(INC) $(CXXFLAGS) -o $@ -c $<
$ make
src/main2.cpp:1:10: fatal error: 'main2.h' file not found
#include "main2.h"
^~~~~~~~~
1 error generated.
src/main.cpp:2:10: fatal error: 'main2.h' file not found
#include "main2.h"
^~~~~~~~~
1 error generated.
g++ -g -O0 -Wall -Wextra -Wshadow -Wnon-virtual-dtor -pedantic -o obj/main.o -c src/main.cpp
src/main.cpp:2:10: fatal error: 'main2.h' file not found
#include "main2.h"
^~~~~~~~~
1 error generated.
make: *** [obj/main.o] Error 1
现在我确实在我的 c_cpp_properties.json 和 global settings.json 中添加了很多东西,如下所示,但似乎没有任何效果!
c_cpp_properties.json
{
"configurations": [
{
"name": "macos-gcc-x64",
"includePath": [
"${workspaceFolder}/**",
"${workspaceRoot}/**",
"${default}"
],
"compilerPath": "/usr/bin/clang",
"cStandard": "${default}",
"cppStandard": "c++11",
"intelliSenseMode": "macos-gcc-x64",
"compilerArgs": [
"-Wall",
"-Wextra",
"-Wpedantic"
],
"browse": {
"path": [
"${workspaceRoot}",
"${workspaceFolder}"
],
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
}
}
],
"version": 4
}
settings.json
"C_Cpp.default.includePath": [
"${default}",
"${workspaceRoot}/src/include",
"${workspaceFolder}/**"
],
"C_Cpp.default.forcedInclude": [ "{default}", "${workspaceRoot}/**" ]
我在 Mac OS 上使用 VS Code!非常感谢您在这方面的任何帮助。
下面是我的makefile
########################################################################
####################### Makefile Template ##############################
########################################################################
# Compiler settings - Can be customized.
CC = g++
CXXFLAGS = -g -O0 -std=c++11 -Wall -Wextra -Wshadow -Wnon-virtual-dtor -pedantic
LDFLAGS =
# Makefile settings - Can be customized.
APPNAME = myapp
EXT = .cpp
SRCDIR = src
OBJDIR = obj
############## Do not change anything from here downwards! #############
SRC = $(wildcard $(SRCDIR)/*$(EXT))
OBJ = $(SRC:$(SRCDIR)/%$(EXT)=$(OBJDIR)/%.o)
DEP = $(OBJ:$(OBJDIR)/%.o=%.d)
# UNIX-based OS variables & settings
RM = rm
DELOBJ = $(OBJ)
# Windows OS variables & settings
DEL = del
EXE = .exe
WDELOBJ = $(SRC:$(SRCDIR)/%$(EXT)=$(OBJDIR)\\%.o)
INC=-I$(SRCDIR)/include
########################################################################
####################### Targets beginning here #########################
########################################################################
all: $(APPNAME)
# Builds the app
$(APPNAME): $(OBJ)
$(CC) $(CXXFLAGS) -o $@ $^ $(LDFLAGS)
# Creates the dependecy rules
%.d: $(SRCDIR)/%$(EXT)
@$(CPP) $(CFLAGS) $< -MM -MT $(@:%.d=$(OBJDIR)/%.o) >$@
# Includes all .h files
-include $(DEP)
# Building rule for .o files and its .c/.cpp in combination with all .h
$(OBJDIR)/%.o: $(SRCDIR)/%$(EXT)
$(CC) $(INC) $(CXXFLAGS) -o $@ -c $<
################### Cleaning rules for Unix-based OS ###################
# Cleans complete project
.PHONY: clean
clean:
$(RM) $(DELOBJ) $(DEP) $(APPNAME)
# Cleans only all files with the extension .d
.PHONY: cleandep
cleandep:
$(RM) $(DEP)
#################### Cleaning rules for Windows OS #####################
# Cleans complete project
.PHONY: cleanw
cleanw:
$(DEL) $(WDELOBJ) $(DEP) $(APPNAME)$(EXE)
# Cleans only all files with the extension .d
.PHONY: cleandepw
cleandepw:
$(DEL) $(DEP)
【问题讨论】:
-
make对任何 JSON 文件一无所知,因此对这些文件进行任何修改都不会对make产生任何影响。make读取 Makefile,并且仅读取 Makefile,以了解要运行的命令。 -
你没有显示足够多的 makefile 让我们开始猜测可能出了什么问题。
-
我编辑了问题以放入makefile!!
标签: c++ c++11 visual-studio-code makefile include