From 77eb0f025ef0d8f452795aa2a5b65a8088a2cb9c Mon Sep 17 00:00:00 2001 From: yueyoum Date: Tue, 11 Jun 2024 11:54:51 +0800 Subject: [PATCH 1/2] cmake support Linux --- CMakeLists.txt | 76 ++++++++++++++++++++++++++++++-------------------- README.md | 31 +++++++++++++++++--- 2 files changed, 73 insertions(+), 34 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f478e38..4ddfb31 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,18 +7,42 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m64") # 定义工程根目录; CMAKE_SOURCE_DIR为内建变量,表示工程根目录的CMakeLists.txt文件路径 SET(ROOT_DIR ${CMAKE_SOURCE_DIR}) -# 定义freeglut库目录 -# 判断编译系统是MSVC还是MinGW -if(MSVC) - message("Using MSVC compiler") - SET(GLUT_DIR ${ROOT_DIR}/libs/freeglut_msvc) -elseif(MINGW) - message("Using MinGW compiler") - SET(GLUT_DIR ${ROOT_DIR}/libs/freeglut_mingw) + +if(WIN32) + + # 添加外部静态 + add_library(freeglut STATIC IMPORTED) + + # 判断编译系统是MSVC还是MinGW + if(MSVC) + message("Build on WIN32. Using MSVC compiler.") + SET(GLUT_DIR ${ROOT_DIR}/libs/freeglut_msvc) + set_property(TARGET freeglut PROPERTY IMPORTED_LOCATION ${GLUT_DIR}/lib/x64/freeglut.lib) + elseif(MINGW) + message("Build on WIN32. Using MinGW compiler.") + SET(GLUT_DIR ${ROOT_DIR}/libs/freeglut_mingw) + set_property(TARGET freeglut PROPERTY IMPORTED_LOCATION ${GLUT_DIR}/lib/x64/libfreeglut.a) + else() + message(FATAL_ERROR "Build on WIN32. Using an unknown compiler.") + endif() + + # 包含路径 + target_include_directories(${PROJECT_NAME} + PUBLIC + ${ROOT_DIR}/libs/freeglut_msvc/include + ) + +elseif(LINUX) + message("Build on LINUX.") + set(OpenGL_GL_PREFERENCE GLVND) + find_package(GLUT REQUIRED) + find_package(OpenGL REQUIRED) + else() - message(FATAL_ERROR "Using an unknown compiler.") + message(FATAL_ERROR, "Unsupported OS") endif() + # 解决vs SAFESEH报错 # set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SAFESEH:NO /NODEFAULTLIB:glut32.lib") @@ -28,32 +52,24 @@ file(GLOB SOURCES "src/*.cpp") # 编译目标 add_executable(${PROJECT_NAME} ${SOURCES}) -# 包含路径 -target_include_directories(${PROJECT_NAME} - PUBLIC - ${ROOT_DIR}/libs/freeglut_msvc/include -) - -# 添加外部静态 -add_library(freeglut STATIC IMPORTED) -if(MSVC) - set_property(TARGET freeglut PROPERTY IMPORTED_LOCATION ${GLUT_DIR}/lib/x64/freeglut.lib) -elseif(MINGW) - set_property(TARGET freeglut PROPERTY IMPORTED_LOCATION ${GLUT_DIR}/lib/x64/libfreeglut.a) -endif() - -target_link_libraries(${PROJECT_NAME} freeglut opengl32 glu32) # 添加freeglut.lib - -# 复制动态库到执行目录 set(EXECUTABLE_OUTPUT_PATH ${ROOT_DIR}/bin) -if(MSVC) +if(WIN32) + target_link_libraries(${PROJECT_NAME} freeglut opengl32 glu32) # 添加freeglut.lib + + # 复制动态库到执行目录 + if(MSVC) file(COPY ${GLUT_DIR}/bin/x64/freeglut.dll DESTINATION ${EXECUTABLE_OUTPUT_PATH}/Release) file(COPY ${GLUT_DIR}/bin/x64/freeglut.dll DESTINATION ${EXECUTABLE_OUTPUT_PATH}/Debug) -elseif(MINGW) - file(COPY ${GLUT_DIR}/bin/x64/freeglut.dll - DESTINATION ${EXECUTABLE_OUTPUT_PATH}) + elseif(MINGW) + file(COPY ${GLUT_DIR}/bin/x64/freeglut.dll + DESTINATION ${EXECUTABLE_OUTPUT_PATH}) + endif() + +elseif(LINUX) + target_link_libraries(${PROJECT_NAME} glut OpenGL GLU) + endif() diff --git a/README.md b/README.md index 4346e89..900384f 100644 --- a/README.md +++ b/README.md @@ -30,8 +30,12 @@ 在网格寻路的过程中,我们只是找到了一条从起点到终点的网格路径,但是这条路径并不是我们想要的最终路径,因为这条路径是由网格组成的,而我们需要的是由顶点组成的路径。所以我们需要根据网格路径生成最终的路径。这种算法通常称为路径的二次优化算法。本工程使用拐点算法来实现。 ## 编译方式说明 -此工程的编译运行环境为windows,需要你的电脑的开发环境有cmake、Visual Studio或make、MinGW -### 一、cmake+visual studio编译 +此工程可以在Windows 或者 Linux 上编译 + +### Windows +需要你的电脑的开发环境有cmake、Visual Studio或make、MinGW + +#### 一、cmake+visual studio编译 1.在cmake中设置源码目录和build目录 ![image.png](https://sxm-upload.oss-cn-beijing.aliyuncs.com/imgs/20230113115226.png) @@ -41,10 +45,10 @@ 3.点击`Generrate`生成vs工程,生成的目录为`build`目录,用vs打开生成的工程并运行,可执行程序会生成到当前项目根目录的`bin`目录下 -### 二、mingw+make+gcc编译 +#### 二、mingw+make+gcc编译 在项目根目录执行`make`命令即可,可执行程序同样会生成到`bin`目录下 -### 三、VScode+cmake插件编译 +#### 三、VScode+cmake插件编译 1.选择编译套件 ![image.png](https://sxm-upload.oss-cn-beijing.aliyuncs.com/imgs/20240131165800.png) @@ -57,6 +61,25 @@ ![image.png](https://sxm-upload.oss-cn-beijing.aliyuncs.com/imgs/20240131165954.png) +### Linux +需要系统安装好 freeglut 和 OpenGL 库 + +ubuntu 系统使用如下命令 + +`sudo apt install freeglut3-dev` + +进入项目目录中 依次执行下面的命令 + +``` +mkdir build +cd build +cmake .. +make +``` + +可执行程序同样会生成到`bin`目录下 + + ## 程序运行说明 编译成功后再运行你会看到如下的程序运行界面: From c1ae6d33c006a6efc540ac37b6cff3512711ae6b Mon Sep 17 00:00:00 2001 From: yueyoum Date: Tue, 11 Jun 2024 09:45:55 +0100 Subject: [PATCH 2/2] adj --- .gitignore | 1 + CMakeLists.txt | 20 +++++++++++--------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/.gitignore b/.gitignore index cda5ffc..d330695 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,4 @@ /build /bin .vscode +.vs diff --git a/CMakeLists.txt b/CMakeLists.txt index 4ddfb31..54a8155 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,11 +26,7 @@ if(WIN32) message(FATAL_ERROR "Build on WIN32. Using an unknown compiler.") endif() - # 包含路径 - target_include_directories(${PROJECT_NAME} - PUBLIC - ${ROOT_DIR}/libs/freeglut_msvc/include - ) + elseif(LINUX) message("Build on LINUX.") @@ -56,14 +52,20 @@ add_executable(${PROJECT_NAME} ${SOURCES}) set(EXECUTABLE_OUTPUT_PATH ${ROOT_DIR}/bin) if(WIN32) + # 包含路径 + target_include_directories(${PROJECT_NAME} + PUBLIC + ${ROOT_DIR}/libs/freeglut_msvc/include + ) + target_link_libraries(${PROJECT_NAME} freeglut opengl32 glu32) # 添加freeglut.lib # 复制动态库到执行目录 if(MSVC) - file(COPY ${GLUT_DIR}/bin/x64/freeglut.dll - DESTINATION ${EXECUTABLE_OUTPUT_PATH}/Release) - file(COPY ${GLUT_DIR}/bin/x64/freeglut.dll - DESTINATION ${EXECUTABLE_OUTPUT_PATH}/Debug) + file(COPY ${GLUT_DIR}/bin/x64/freeglut.dll + DESTINATION ${EXECUTABLE_OUTPUT_PATH}/Release) + file(COPY ${GLUT_DIR}/bin/x64/freeglut.dll + DESTINATION ${EXECUTABLE_OUTPUT_PATH}/Debug) elseif(MINGW) file(COPY ${GLUT_DIR}/bin/x64/freeglut.dll DESTINATION ${EXECUTABLE_OUTPUT_PATH})