CLipper2 编译记录
clipper2 简介
clipper2官网:http://www.angusj.com/clipper2
clipper2项目地址:http://github.com/AngusJohnson/Clipper2
git clone https://github.com/AngusJohnson/Clipper2.git
clipper可以使用C++,C#,Delphi Pascal,本文只讨论C++版本的编译过程。
clipper2的目录结构
├─CPP
│ ├─Clipper2Lib
│ │ ├─include
│ │ │ └─clipper2
│ │ └─src
│
├─CSharp
│
├─Delphi
│
├─DLL
│ ├─CPP_DLL
│
└─Tests
msvc编译
在clipper2中msvc的编译还是很方便的。
进入path/to/clipper2/DLL/CPP_DLL目录,使用vsstudio打开项目文件。
│ Clipper2_DLL.sln
│ Clipper2_Export.vcxproj
│ Clipper2_Export.vcxproj.user
│ dllmain.cpp
│ framework.h
│ pch.cpp
│ pch.h
打开项目之后点击生成解决方案即可。

新建一个项目实验能否使用
导入include目录和Clipper2_64.lib,在编译后的编译目录中把Clipper2_64.dll放进去,运行如下

测试代码
#include <iostream>
#include "clipper2/clipper.h"
#include "clipper2/clipper.version.h"
int main()
{
std::cout << "The version of clipper2 is " << CLIPPER2_VERSION << "\n";
return 0;
}
gcc编译
我使用的编译环境是win11平台,cmake3.27.7, gcc12.2.0


clipper2 本身提供了足够多的宏定义来决定是否需要某些组件。在本文中按照如下来修改宏。
12-26行
option(CLIPPER2_UTILS "Build utilities" OFF)
option(CLIPPER2_EXAMPLES "Build examples" OFF)
option(CLIPPER2_TESTS "Build tests" OFF)
option(USE_EXTERNAL_GTEST "Use system-wide installed GoogleTest" OFF)
option(USE_EXTERNAL_GBENCHMARK "Use the googlebenchmark" OFF)
option(BUILD_SHARED_LIBS "Build shared libs" ON)
set(CLIPPER2_USINGZ "ON" CACHE STRING "Build Clipper2Z, either \"ON\" or \"OFF\" or \"ONLY\"")
set(CLIPPER2_MAX_PRECISION 8 CACHE STRING "Maximum precision allowed for double to int64 scaling")
201-202行
# add_subdirectory("${PROJECT_SOURCE_DIR}/Tests/googletest/")
# set_target_properties(gtest gtest_main PROPERTIES FOLDER GTest)
随后打开控制台 本文使用的是 MSYS2 MinGW64
进入当前目录 cd path/to/Clipper2/CPP
新建目录build mkdir build
进入目录 cd build
构建cmake项目 cmake .. -G "Unix Makefiles"
随后编译 make install
构建命令集合
cd path/to/Clipper2/CPP
mkdir build
cd build
cmake .. -G "Unix Makefiles
make install
编译后的文件结构
│ Clipper2.pc
│ Clipper2Z.pc
│ CMakeCache.txt
│ cmake_install.cmake
│ libClipper2.dll
│ libClipper2.dll.a
│ libClipper2Z.dll
│ libClipper2Z.dll.a
│ Makefile
│
└─CMakeFiles
新建一个项目试用下
在cmake中添加
# 导入clipper
set(CLIPPER2_PATH "ptah\\to\\Clipper2\\CPP")
include_directories(${CLIPPER2_PATH}/Clipper2Lib/include)
link_directories(${CLIPPER2_PATH}/build)
target_link_libraries(testProject PRIVATE Clipper2)
继续使用上面的测试代码实验是否成功。

gcc拆开构建
Clipper2的项目结构并不复杂,因此我在最早构建的时候将CLipper2Lib文件单独分开来,
目录结构如下
├─build
│
├─include
│ └─clipper2
│ clipper.core.h
│ clipper.engine.h
│ clipper.export.h
│ clipper.h
│ clipper.minkowski.h
│ clipper.offset.h
│ clipper.rectclip.h
│ clipper.version.h
│
└─src
clipper.engine.cpp
clipper.offset.cpp
clipper.rectclip.cpp
很显然这些是库目录,因此直接编译这些代码即可
首先写一个cmake文件将这些文件联系在一起
进入当前目录cd path/to/Clipper2Lib
创建一个cmake文件touch CMakeLists.txt
将下面内容写入cmake文件
cmake_minimum_required(VERSION 3.10)
project(Clipper_64)
file(GLOB SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/install) # 安装目标路径
include_directories(${PROJECT_SOURCE_DIR}/include)
add_library(Clipper2_static STATIC ${SRC})
set_target_properties(Clipper2_static PROPERTIES OUTPUT_NAME "Clipper2")
add_library(Clipper2 SHARED ${SRC})
set_target_properties(Clipper2 PROPERTIES OUTPUT_NAME "Clipper2")
# 安装静态库
install(TARGETS Clipper2_static
ARCHIVE DESTINATION lib)
# 安装动态库
install(TARGETS Clipper2
LIBRARY DESTINATION lib)
# 安装头文件
install(DIRECTORY ${PROJECT_SOURCE_DIR}/include/
DESTINATION include)
创建build目录mkdir build
进入build目录cd build
构建项目cmake .. -G "Unix Makefiles"
随后编译make install
命令集合
cd path/to/Clipper2Lib
touch CMakeLists.txt
mkdir build
cd build
cmake .. -G "Unix Makefiles"
make install
编译之后的文件结构为
│ CMakeCache.txt
│ cmake_install.cmake
│ Makefile
│
├─bin
│ libClipper2.dll
│
├─CMakeFiles
│
└─lib
libClipper2.a
libClipper2.dll.a
根据上面同样的方法测试是否成功

下载链接
msvc
gcc

浙公网安备 33010602011771号