文件之间的 C++ 依赖目录
C++ Dependencies directories between files
我的编译器在搜索目录中的文件时遇到问题。我在 windows 10.
首先,我的文件是这样组织的:
- C:/mingw64/bin/g++(我的编译器在这里)
- C:/Users/Christophe/Documents/main.cpp(我的文件)
- C:/Users/Christophe/Documents/SFML/include(我的files.hpp)
- C:/Users/Christophe/Documents/SFML/lib (???)
我有 9 个文件 .hpp,它们是:
- Audio.hpp
- Config.hpp
- GpuPreference.hpp
- Graphics.hpp
- Main.hpp
- Network.hpp
- OpenGL.hpp
- System.hpp
- Window.hpp
我有我的 main.cpp,这是一个例子,看看我的 SMFL 是否有效:
#include <Graphics.hpp>
int main(){
sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!");
sf::CircleShape shape(100.f);
shape.setFillColor(sf::Color::Green);
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}
window.clear();
window.draw(shape);
window.display();
}
return 0;
}
问题是我的编译器说:“没有这样的文件或目录” #include 红色。
我试图通过 VisualStudioCode 找到解决方案,并在每个文件 .hpp 上使用 .json 中的 IncludePaths 但是没用。
我也试过在我的终端上输入命令:g++ -I/SFML/include main.cpp -o EX 但是我有上面的错误。
或者:g++ -I/SFML/include/** main.cpp -o EX 但这次是 #include 这是红色的。
我不明白他为什么会出现这个错误,因为我没有包含它...它似乎无法识别我的路径或.hpp 之间存在依赖关系。也许解决方案在目录“lib”中,但我不知道如何指定或操作它。
我从昨天开始就被封锁了,希望你能帮助我。
克里斯托夫。
如果我是你,我不会费心自己制作一个 makefile。
相反,我将使用 cmake 生成 makefile 并让他编译我的代码和 SFML。
如果你想这样做,你可以在他们的网站上下载 cmake。
- https://cmake.org/
如果你在 window
上,不要忘记将 cmake 添加到你的路径变量中
然后在您的项目中创建一个名为
的文件
- CMakeLists.txt
- 一个 Lib 文件夹,您拥有所有的库
- 您拥有所有源文件的源文件夹
- 编译结果所在的 Build 文件夹
在您的 CMakeLists 中使用 c++11 复制并粘贴 sfml 的代码
cmake_minimum_required(VERSION 3.19)
project(ProjectNAME)
# Source files
set(SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/source")
set(LIB_DIR "${CMAKE_CURRENT_SOURCE_DIR}/lib")
#All the sources files listed
#List only the cpp file, header are automatically listed
set(SOURCES
"${SRC_DIR}/main.cpp"
)
# Executable definition and properties
add_executable(${PROJECT_NAME} ${SOURCES})
target_include_directories(${PROJECT_NAME} PRIVATE "${SRC_DIR}")
set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 11)
# SFML
set(SFML_DIR "${LIB_DIR}/SFML")
# this line is here to avoid having to move the dll into the build folder
set(BUILD_SHARED_LIBS FALSE)
add_subdirectory("${SFML_DIR}")
target_link_libraries(${PROJECT_NAME} sfml-graphics sfml-audio sfml-system sfml-window sfml-network)
不要忘记将 main.cpp 放在源文件夹中,将 SFML 文件夹放在 Lib 文件夹中。
注意正确命名CMakeLists.txt
中的所有文件夹
那么如果你在 linux 上使用 gcc 或 g++:
- 打开你的终端
- 进入 Build 文件夹
- 执行命令“
cmake ..
”
- 等到它完成
- 执行命令“
make
”
- 等到它完成
- 用“
./ProjectNAME
”启动你的程序
如果你在 window 上使用 mingw(不要忘记在你的路径中添加 mingw):
- 打开你的终端
- 进入根文件夹
- 执行命令“
cmake -G "MinGW Makefiles" -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -B build/Debug -DCMAKE_BUILD_TYPE=Debug
”
- 等到它完成
- 进入构建文件夹
- 执行命令“
mingw32-make -j
”
- 等到它完成
- 用“
ProjectNAME.exe
”启动你的程序
一切都应该很容易工作,而无需自己配置 make 文件。
如果您想了解有关 cmake 的更多信息,他们有很棒的文档
现在您只需包含
我的编译器在搜索目录中的文件时遇到问题。我在 windows 10.
首先,我的文件是这样组织的:
- C:/mingw64/bin/g++(我的编译器在这里)
- C:/Users/Christophe/Documents/main.cpp(我的文件)
- C:/Users/Christophe/Documents/SFML/include(我的files.hpp)
- C:/Users/Christophe/Documents/SFML/lib (???)
我有 9 个文件 .hpp,它们是:
- Audio.hpp
- Config.hpp
- GpuPreference.hpp
- Graphics.hpp
- Main.hpp
- Network.hpp
- OpenGL.hpp
- System.hpp
- Window.hpp
我有我的 main.cpp,这是一个例子,看看我的 SMFL 是否有效:
#include <Graphics.hpp>
int main(){
sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!");
sf::CircleShape shape(100.f);
shape.setFillColor(sf::Color::Green);
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}
window.clear();
window.draw(shape);
window.display();
}
return 0;
}
问题是我的编译器说:“没有这样的文件或目录” #include
我试图通过 VisualStudioCode 找到解决方案,并在每个文件 .hpp 上使用 .json 中的 IncludePaths 但是没用。
我也试过在我的终端上输入命令:g++ -I/SFML/include main.cpp -o EX 但是我有上面的错误。
或者:g++ -I/SFML/include/** main.cpp -o EX 但这次是 #include
我不明白他为什么会出现这个错误,因为我没有包含它...它似乎无法识别我的路径或.hpp 之间存在依赖关系。也许解决方案在目录“lib”中,但我不知道如何指定或操作它。
我从昨天开始就被封锁了,希望你能帮助我。
克里斯托夫。
如果我是你,我不会费心自己制作一个 makefile。
相反,我将使用 cmake 生成 makefile 并让他编译我的代码和 SFML。
如果你想这样做,你可以在他们的网站上下载 cmake。
- https://cmake.org/ 如果你在 window 上,不要忘记将 cmake 添加到你的路径变量中
然后在您的项目中创建一个名为
的文件- CMakeLists.txt
- 一个 Lib 文件夹,您拥有所有的库
- 您拥有所有源文件的源文件夹
- 编译结果所在的 Build 文件夹
在您的 CMakeLists 中使用 c++11 复制并粘贴 sfml 的代码
cmake_minimum_required(VERSION 3.19)
project(ProjectNAME)
# Source files
set(SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/source")
set(LIB_DIR "${CMAKE_CURRENT_SOURCE_DIR}/lib")
#All the sources files listed
#List only the cpp file, header are automatically listed
set(SOURCES
"${SRC_DIR}/main.cpp"
)
# Executable definition and properties
add_executable(${PROJECT_NAME} ${SOURCES})
target_include_directories(${PROJECT_NAME} PRIVATE "${SRC_DIR}")
set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 11)
# SFML
set(SFML_DIR "${LIB_DIR}/SFML")
# this line is here to avoid having to move the dll into the build folder
set(BUILD_SHARED_LIBS FALSE)
add_subdirectory("${SFML_DIR}")
target_link_libraries(${PROJECT_NAME} sfml-graphics sfml-audio sfml-system sfml-window sfml-network)
不要忘记将 main.cpp 放在源文件夹中,将 SFML 文件夹放在 Lib 文件夹中。 注意正确命名CMakeLists.txt
中的所有文件夹那么如果你在 linux 上使用 gcc 或 g++:
- 打开你的终端
- 进入 Build 文件夹
- 执行命令“
cmake ..
” - 等到它完成
- 执行命令“
make
” - 等到它完成
- 用“
./ProjectNAME
”启动你的程序
如果你在 window 上使用 mingw(不要忘记在你的路径中添加 mingw):
- 打开你的终端
- 进入根文件夹
- 执行命令“
cmake -G "MinGW Makefiles" -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -B build/Debug -DCMAKE_BUILD_TYPE=Debug
” - 等到它完成
- 进入构建文件夹
- 执行命令“
mingw32-make -j
” - 等到它完成
- 用“
ProjectNAME.exe
”启动你的程序
一切都应该很容易工作,而无需自己配置 make 文件。 如果您想了解有关 cmake 的更多信息,他们有很棒的文档
现在您只需包含