opencascade CMAKE 帮助手册

Building with CMake {#occt_dev_guides__building_cmake}

@tableofcontents

@section build_cmake_intro General

This article describes the CMake-based build process, which is now suggested as a standard way to produce the binaries of Open CASCADE Technology from sources. OCCT requires CMake version 2.8.12 or later.

@note Compared to the previous (6.x) releases of Open CASCADE Technology, OCCT 7.x has a complete set of CMake scripts and projects, so that there is no need to use WOK anymore. Moreover, CMake gives you a powerful configuration tool, which allows to control many aspects of OCCT deployment. At the same time this tool is quite intuitive, which is a significant advantage over the legacy WOK utilities.

Here we describe the build procedure on the example of Windows platform with Visual Studio 2010.
However, CMake is cross-platform and can be used to build OCCT on Linux and OS X in essentially the same way.

@note Before you start, make sure to have installed all 3-rd party products that you are going to use with OCCT; see @ref occt_dev_guides__building.

@section build_cmake_start Start CMake

CMake is a tool that generates the actual project files for the selected target build system (e.g. Unix makefiles) or IDE (e.g. Visual Studio 2010).

For unexperienced users we recommend to start with cmake-gui -- a cross-platform GUI tool provided by CMake on Windows, Mac and Linux.
A command-line alternative, ccmake can also be used.

CMake deals with three directories: source, build or binary and installation.

  • The source directory is where the sources of OCCT are located in your file system;
  • The build or binary directory is where all files created during CMake configuration and generation process will be located. The mentioned process will be described below.
  • The installation directory is where binaries will be installed after building the INSTALL project that is created by CMake generation process, along with header files and resources required for OCCT use in applications.

The good practice is not to use the source directory as a build one.
Different configurations should be built in different build directories to avoid conflicts.
It is however possible to choose one installation directory for several configurations of OCCT (differentiated by platform, bitness, compiler and build type), for example:

d:/occt/                   -- the source directory
d:/tmp/occt-build-vc10-x64 -- the build directory with the generated
                              solution and other intermediate files created during a CMake tool working
d:/occt-install            -- the installation directory that is
                              able to contain several OCCT configurations

@section build_cmake_conf Configuration process

If the command-line tool is used, run the tool from the build directory with a single argument indicating the source (relative or absolute path) directory:

cd d:/tmp/occt-build-vc10-x64
ccmake d:/occt

@figure{/dev_guides/building/cmake/images/cmake_image000.png}

Press c to configure.

All actions required in the configuration process with the GUI tool will be described below.

If the GUI tool is used, run this tool without additional arguments and after that specify the source directory by clicking Browse Source and the build (binary) one by clicking Browse Build.

@figure{/dev_guides/building/cmake/images/cmake_image001.png}

Note: Each configuration of the project should be built in its own directory. When building multiple configurations it is recommended to indicate in the name of build directories the system, bitness and compiler (e.g., <i>d:/occt/build/win32-vc10</i> ).

Once the source and build directories are selected, "Configure" button should be pressed in order to start manual configuration process. It begins with selection of a target configurator. It is "Visual Studio 10 2010 Win64" in our example.

@figure{/dev_guides/building/cmake/images/cmake_image002.png}

To build OCCT for Universal Windows Platform (UWP) specify the path to toolchain file for cross-compiling <i>d:/occt/adm/templates/uwp.toolchain.config.cmake</i>.

Alternatively, if you are using CMake from the command line add options -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION=10.0 .

Note: Universal Windows Platform (UWP) is supported only on "Visual Studio 14 2015". File <i>d:/occt/samples/xaml/ReadMe.md</i> describes the building procedure of XAML (UWP) sample.

Once "Finish" button is pressed, the first pass of the configuration process is executed. At the end of the process, CMake outputs the list of environment variables, which have to be properly specified for successful configuration.

@figure{/dev_guides/building/cmake/images/cmake_image003.png}

The error message provides some information about these variables. This message will appear after each pass of the process until all required variables are specified correctly.

The change of the state of some variables can lead to the appearance of new variables. The new variables appeared after the pass of the configuration process are highlighted with red color by CMake GUI tool.

Note: There is "grouped" option, which groups variables with a common prefix.

The following table gives the full list of environment variables used at the configuration stage:

Variable Type Purpose
CMAKE_BUILD_TYPE String Specifies the build type on single-configuration generators (such as make). Possible values are Debug, Release and RelWithDebInfo
USE_FREEIMAGE Boolean flag Indicates whether FreeImage product should be used in OCCT visualization module for support of popular graphics image formats (PNG, BMP, etc.)
USE_TBB Boolean flag Indicates whether TBB 3rd party is used or not. TBB stands for Threading Building Blocks, the technology of Intel Corp, which comes with different mechanisms and patterns for injecting parallelism into your application. OCCT remains parallel even without TBB product
USE_VTK Boolean flag Indicates whether VTK 3rd party is used or not. VTK stands for Visualization ToolKit, the technology of Kitware Inc intended for general-purpose scientific visualization. OCCT comes with a bridge between CAD data representation and VTK by means of its dedicated VIS component (VTK Integration Services). You may skip this 3rd party unless you are planning to use VTK visualization for OCCT geometry. See the official documentation @ref occt_user_guides__vis for the details on VIS
3RDPARTY_DIR Path Defines the root directory where all required 3rd party products will be searched. Once you define this path it is very convenient to click "Configure" button in order to let CMake automatically detect all necessary products
3RDPARTY_FREETYPE_* Path Path to Freetype binaries
3RDPARTY_TCL_* 3RDPARTY_TK_* Path Path to Tcl/Tk binaries
3RDPARTY_FREEIMAGE* Path Path to Freeimage binaries
3RDPARTY_TBB* Path Path to TBB binaries
3RDPARTY_VTK_* Path Path to VTK binaries
BUILD_MODULE_<MODULE> Boolean flag Indicates whether the corresponding OCCT module should be built or not. It should be noted that some toolkits of a module can be built even if this module is not checked (this happens if some other modules depend on these toolkits). The main modules and their descriptions can be found in @ref user_guides
BUILD_LIBRARY_TYPE String Specifies the type of library to be created. "Shared" libraries are linked dynamically and loaded at runtime. "Static" libraries are archives of object files used when linking other targets. Note that Draw Harness plugin system is incompatible with "Static" builds, and therefore it is disabled for these builds.
BUILD_ADDITIONAL_TOOLKITS String Semicolon-separated individual toolkits to include into build process. If you want to build some particular libraries (toolkits) only, then you may uncheck all modules in the corresponding BUILD_MODUE_<MODULE> options and provide the list of necessary libraries here. Of course, all dependencies will be resolved automatically
BUILD_YACCLEX Boolean flag Enables Flex/Bison lexical analyzers. OCCT source files relating to STEP reader and ExprIntrp functionality are generated automatically with Flex/Bison. Checking this option leads to automatic search of Flex/Bison binaries and regeneration of the mentioned files
BUILD_SAMPLES_MFC Boolean flag Indicates whether MFC samples should be built together with OCCT. This option is only relevant to Windows platforms
BUILD_SAMPLES_QT Boolean flag Indicates whether QT samples should be built together with OCCT.
BUILD_Inspector Boolean flag Indicates whether Inspector should be built together with OCCT.
BUILD_DOC_Overview Boolean flag Indicates whether OCCT overview documentation project should be created together with OCCT. It is not built together with OCCT. Checking this option leads to automatic search of Doxygen binaries. Its building calls Doxygen command to generate the documentation in HTML format
BUILD_PATCH Path Points to the directory recognized as a "patch" for OCCT. If specified, the files from this directory take precedence over the corresponding native OCCT sources. This way you are able to introduce patches to Open CASCADE Technology not affecting the original source distribution
BUILD_WITH_DEBUG Boolean flag Enables extended messages of many OCCT algorithms, usually printed to cout. These include messages on internal errors and special cases encountered, timing, etc.
BUILD_ENABLE_FPE_SIGNAL_HANDLER Boolean flag Enable/Disable the floating point exceptions (FPE) during DRAW execution only. Corresponding environment variable (CSF_FPE) can be changed manually in custom.bat/sh scripts without regeneration by CMake.
CMAKE_CONFIGURATION_TYPES String Semicolon-separated CMake configurations
INSTALL_DIR Path Points to the installation directory. INSTALL_DIR is a synonym of CMAKE_INSTALL_PREFIX. The user can specify both INSTALL_DIR or CMAKE_INSTALL_PREFIX
INSTALL_DIR_BIN Path Relative path to the binaries installation directory (absolute path is {INSTALL_DIR}/{INSTALL_DIR_BIN})
INSTALL_DIR_SCRIPT Path Relative path to the scripts installation directory (absolute path is {INSTALL_DIR}/{INSTALL_DIR_SCRIPT})
INSTALL_DIR_LIB Path Relative path to the libraries installation directory (absolute path is {INSTALL_DIR}/{INSTALL_DIR_LIB})
INSTALL_DIR_INCLUDE Path Relative path to the includes installation directory (absolute path is {INSTALL_DIR}/{INSTALL_DIR_INCLUDE})
INSTALL_DIR_RESOURCE Path Relative path to the resources installation directory (absolute path is {INSTALL_DIR}/{INSTALL_DIR_RESOURCE})
INSTALL_DIR_LAYOUT String Defines the structure of OCCT files (binaries, resources, headers, etc.) for the install directory. Two variants are predefined: for Windows (standard OCCT layout) and for Unix operating systems (standard Linux layout). If needed, the layout can be customized with INSTALL_DIR_* variables
INSTALL_DIR_DATA Path Relative path to the data files installation directory (absolute path is {INSTALL_DIR}/{INSTALL_DIR_DATA})
INSTALL_DIR_SAMPLES Path Relative path to the samples installation directory. Note that only "samples/tcl" folder will be installed. (absolute path is {INSTALL_DIR}/{INSTALL_DIR_SAMPLES})
INSTALL_DIR_TESTS Path Relative path to the tests installation directory (absolute path is {INSTALL_DIR}/{INSTALL_DIR_TESTS})
INSTALL_DIR_DOC Path Relative path to the documentation installation directory (absolute path is {INSTALL_DIR}/{INSTALL_DIR_DOC})
INSTALL_FREETYPE Boolean flag Indicates whether Freetype binaries should be installed into the installation directory
INSTALL_FREEIMAGE* Boolean flag Indicates whether Freeimage binaries should be installed into the installation directory
INSTALL_TBB Boolean flag Indicates whether TBB binaries should be installed into the installation directory
INSTALL_VTK Boolean flag Indicates whether VTK binaries should be installed into the installation directory
INSTALL_TCL Boolean flag Indicates whether TCL binaries should be installed into the installation directory
INSTALL_TEST_CASES Boolean flag Indicates whether non-regression OCCT test scripts should be installed into the installation directory
INSTALL_DOC_Overview Boolean flag Indicates whether OCCT overview documentation should be installed into the installation directory

Note: Only the forward slashes ("/") are acceptable in the CMake options defining paths.

@section build_cmake_3rdparty 3rd party search mechanism

If 3RDPARTY_DIR directory is defined, then required 3rd party binaries are sought in it, and default system folders are ignored.

The procedure expects to find binary and header files of each 3rd party product in its own sub-directory: bin, lib and include.

The results of the search (achieved on the next pass of the configuration process) are recorded in the corresponding variables:

  • 3RDPARTY_<PRODUCT>_DIR -- path to the 3rdparty directory (with directory name) (e.g. <i>D:/3rdparty/tcltk-86-32</i>)
  • 3RDPARTY_<PRODUCT>_LIBRARY_DIR -- path to the directory containing a library (e.g. <i>D:/3rdparty/tcltk-86-32/lib</i>).
  • 3RDPARTY_<PRODUCT>_INCLUDE_DIR -- path to the directory containing a header file (e.g., <i>D:/3rdparty/tcltk-86-32/include</i>)
  • 3RDPARTY_<PRODUCT>_DLL_DIR -- path to the directory containing a shared library (e.g., <i>D:/3rdparty/tcltk-86-32/bin</i>) This variable is only relevant to Windows platforms.

Note: each library and include directory should be children of the product directory if the last one is defined.

The search process is as follows:

  1. Common path: 3RDPARTY_DIR
  2. Path to a particular 3rd-party library: 3RDPARTY_<PRODUCT>_DIR
  3. Paths to headers and binaries:
    1. 3RDPARTY_<PRODUCT>_INCLUDE_DIR
    2. 3RDPARTY_<PRODUCT>_LIBRARY_DIR
    3. 3RDPARTY_<PRODUCT>_DLL_DIR

If a variable of any level is not defined (empty or <i> <variable name>-NOTFOUND </i>) and the upper level variable is defined, the content of the non-defined variable will be sought at the next configuration step. If the search process at level 3 does not find the required files, it seeks in default places.

If a search result (include path, or library path, or dll path) does not meet your expectations, you can change 3RDPARTY_<PRODUCT>_DIR variable*, clear (if they are not empty) *3RDPARTY<PRODUCT>DLL_DIR, 3RDPARTY<PRODUCT>INCLUDE_DIR* and 3RDPARTY<PRODUCT>_LIBRARY_DIR variables (or clear one of them) and run the configuration process again.

At this time the search will be performed in the newly identified directory
and the result will be recorded to corresponding variables (replace old value if it is necessary).

For example, 3RDPARTY_FREETYPE_DIR variable

d:/3rdparty/freetype-2.4.10

can be changed to

d:/3rdparty/freetype-2.5.3

During the configuration process the related variables (3RDPARTY_FREETYPE_DLL_DIR, 3RDPARTY_FREETYPE_INCLUDE_DIR and 3RDPARTY_FREETYPE_LIBRARY_DIR) will be filled with new found values.

Note: The names of searched libraries and header files are hard-coded. If there is the need to change their names, change appropriate cmake variables (edit CMakeCache.txt file or edit in cmake-gui in advance mode) without reconfiguration: 3RDPARTY_<PRODUCT>_INCLUDE for include, 3RDPARTY_<PRODUCT>_LIB for library and 3RDPARTY_<PRODUCT>_DLL for shared library.

@section build_cmake_gen Projects generation

Once the configuration process is done, the "Generate" button is used to prepare project files for the target IDE. In our exercise the Visual Studio solution will be automatically created in the buid directory.

@section build_cmake_build Building

Go to the build folder, start the Visual Studio solution OCCT.sln and build it by clicking Build -> Build Solution.

@figure{/dev_guides/building/cmake/images/cmake_image004.png}

By default the build solution process skips the building of the INSTALL and Overview project.

When the building process is finished build:

  • Overview project to generate OCCT overview documentation (if BUILD_DOC_Overview variable is checked)
  • the INSTALL project to run the installation process

For this, right-click on the Overview/INSTALL project and select Project Only -> Build Only -> Overview/INSTALL in the solution explorer.

@section build_cmake_install Installation

Installation is a process of extracting redistributable resources (binaries, include files etc) from the build directory into the installation one. The installation directory will be free of project files, intermediate object files and any other information related to the build routines.

Normally you use the installation directory of OCCT to link against your specific application.

The directory structure is as follows:

data            -- data files for OCCT (brep, iges, stp)
doc             -- OCCT overview documentation in HTML format
inc             -- header files
samples         -- samples
src             -- all required source files for OCCT
tests           -- OCCT test suite
win32\vc10\bind -- binary files (installed 3rdparties and occt)
          \libd -- libraries (installed 3rdparties and occt)

Note: The above example is given for debug configuration. However, it is generally safe to use the same installation directory for the release build. In the latter case the contents of install directory will be enriched with subdirectories and files related to the release configuration. In particular, the binaries directory win64 will be expanded as
follows:

\win32\vc10\bind
           \libd
           \bin
           \lib

If CMake installation flags are enabled for the 3rd party products (e.g. INSTALL_FREETYPE), then the corresponding binaries will be copied to the same bin(d) and lib(d) directories together with the native binaries of OCCT. Such organization of libraries can be especially helpful if your OCCT-based software does not use itself the 3rd parties of Open CASCADE Technology (thus, there is no sense to pack them into dedicated directories).

The installation folder contains the scripts to run DRAWEXE (draw.bat or draw.sh), samples (if they were installed) and overview.html (short-cut for installed OCCT overview documentation).

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,377评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,390评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,967评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,344评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,441评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,492评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,497评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,274评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,732评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,008评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,184评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,837评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,520评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,156评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,407评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,056评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,074评论 2 352