Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

通过调整 CMakeLists.txt 让项目也能在 Linux 系统上编译运行 #4

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,4 @@
/build
/bin
.vscode
.vs
82 changes: 50 additions & 32 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,38 @@ 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()



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")

Expand All @@ -28,32 +48,30 @@ 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)
set(EXECUTABLE_OUTPUT_PATH ${ROOT_DIR}/bin)

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()
if(WIN32)
# 包含路径
target_include_directories(${PROJECT_NAME}
PUBLIC
${ROOT_DIR}/libs/freeglut_msvc/include
)

target_link_libraries(${PROJECT_NAME} freeglut opengl32 glu32) # 添加freeglut.lib
target_link_libraries(${PROJECT_NAME} freeglut opengl32 glu32) # 添加freeglut.lib

# 复制动态库到执行目录
set(EXECUTABLE_OUTPUT_PATH ${ROOT_DIR}/bin)
# 复制动态库到执行目录
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})
endif()

elseif(LINUX)
target_link_libraries(${PROJECT_NAME} glut OpenGL GLU)

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})
endif()
31 changes: 27 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand All @@ -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)

Expand All @@ -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`目录下


## 程序运行说明

编译成功后再运行你会看到如下的程序运行界面:
Expand Down