使用BOB C++接口的工程实例
bob.example.cmake的Python项目详细描述
此示例项目展示了将鲍伯的C++库集成到C++项目中的方法。 为此,is使用CMake接口和一个自行开发的FindBob.cmake文件。 它依赖于python接口来下载和安装Bob。 有关bob安装的更多信息可以在其webpage上找到。
此软件包是根据BSD-3许可证授权的,版权归科罗拉多大学的摄政者所有,代表科罗拉多大学的Colorado Springs。 有关详细信息,请参阅许可证文件。
构建这个示例
由于示例需要安装一些Bob包,因此我们首先运行安装Bob的方法之一,即使用buildout。 为此,只需转到此软件包的主目录并拨打电话:
$ python bootstrap-buildout.py $ ./bin/buildout
这将把一些包签出到src目录,并将一些包下载到eggs目录。 如果您在全球安装了bob,它将使用全球安装的软件包,而不是下载新的鸡蛋。 如果bob安装在非默认目录中,例如virtual environment,则可以使用该python版本引导。
在这个包中,我准备了一个小型的CMake项目,其中包括一些Bob包。 它使用FindBob.cmake来定位bob的include目录和库。 要启用该功能,可以使用find_package(Bob COMPONENTS <package(s)> REQUIRED)命令查找bobpackage(s)的列表。 稍后,您可以使用三个CMake变量Bob_INCLUDE_DIRS、Bob_LIBRARY_DIRS、Bob_LIBRARIES和Bob_DEFINITIONS,并将其添加到项目中:
cmake_minimum_required(VERSION 2.8) project(test) # Set the module path so that "FindBob.cmake" is found set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}) # Find all Bob packages recursively find_package(Bob COMPONENTS bob.io.image REQUIRED) # Add Bob's include directories include_directories(${Bob_INCLUDE_DIRS}) # Add Bob's library directories link_directories(${Bob_LIBRARY_DIRS}) # Add Bob's libraries link_libraries(${Bob_LIBRARIES} boost_system) # Add Bob's definitions add_definitions(${Bob_DEFINITIONS}) # create an "my_test" executable from file "test.cpp" add_executable(my_test test.cpp)
出于某种原因(我不明白),我们还需要添加boost_system库,尽管理论上它应该已经链接到Bob库了。
所以,现在我们可以使用CMake:
$ mkdir build $ cd build $ cmake .. $ make
我们应该在构建目录中得到一个可执行文件my_test。 请注意,您可以将变量传递给cmake以使用自定义Bob安装:
$ cmake .. -DBOB_PREFIX_PATH=/path/to/your/bob/installation
或者相应地设置BOB_PREFIX_PATH环境变量。 如果您有一个本地目录,其中包含src或eggs子目录中的(某些)bob包,则可以设置BOB_SOURCE_DIR变量,该变量默认为CMakeLists.txt所在的目录:
$ cmake .. -DBOB_SOURCE_DIR=/path/to/your/local/bob/packages
目录的评估顺序为:
- ${BOB_SOURCE_DIR}/src
- ${BOB_SOURCE_DIR}/eggs
- ${BOB_PREFIX_PATH}/lib/*/site-packages(其中*通常是您的python版本)
- 系统路径
要运行该示例,请返回到package base目录(否则将找不到示例图像),然后调用:
$ ./build/my_test
这将在当前目录中创建一个名为test.hdf5的hdf5文件。