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

打开项目之后点击生成解决方案即可。
image
新建一个项目实验能否使用
导入include目录和Clipper2_64.lib,在编译后的编译目录中把Clipper2_64.dll放进去,运行如下
image

测试代码
#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
image
image

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)

继续使用上面的测试代码实验是否成功。
image

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

根据上面同样的方法测试是否成功
image

下载链接

msvc
gcc

posted @ 2023-12-05 00:54  yuchq  阅读(1825)  评论(1)    收藏  举报