原文链接:yuque.com/softdev/cmake/harhs7 libigl仓库:https://github.com/libigl
libigl的CMake工程管理方式有许多优点,本文将介绍它对数据的管理方式。
一、为数据创建一个仓库
libigl为数据专门创建了一个仓库,并把数据放在里面
二、为数据创建一个Target
创建了一个名为igl::tutorial_data
的target
igl::tutorial_data
的内容只有一个名为TUTORIAL_SHARED_PATH
的宏,在C++代码中即可使用这个宏来找到数据包的路径。- libigl把这些内容封装在了
libigl_tutorial_data.cmake
文件中 ```cmake—————-如果工程中,已经有名为igl::tutorial_data的Target,则退出
if(TARGET igl::tutorial_data) return() endif()
message(STATUS “Third-party: creating target ‘igl::tutorial_data’”)
—————-使用CMake的FetchContent命令下载数据包
include(FetchContent) FetchContent_Declare( libigl_tutorial_tata GIT_REPOSITORY https://github.com/libigl/libigl-tutorial-data GIT_TAG c1f9ede366d02e3531ecbaec5e3769312f31cccd ) FetchContent_MakeAvailable(libigl_tutorial_tata)
创建一个动态链接库,名为igl_tutorial_data
add_library(igl_tutorial_data INTERFACE)
重命名Target
add_library(igl::tutorial_data ALIAS igl_tutorial_data)
添加一个宏TUTORIAL_SHARED_PATH
target_compile_definitions(igl_tutorial_data INTERFACE “-DTUTORIAL_SHARED_PATH=\”${libigl_tutorial_tata_SOURCE_DIR}\”” )
参考链接
1. [https://cmake.org/cmake/help/latest/module/FetchContent.html](https://cmake.org/cmake/help/latest/module/FetchContent.html)
<a name="QLfXO"></a>
#### 三、在顶级CMake文件中,引入数据包的Target代码
```cmake
# Download tutorial data
include(libigl_tutorial_data) #即include libigl_tutorial_data.cmake文件
四、使用数据包
第一步:在需要使用此数据包的Target中(如HelloWorld
)链接igl::tutorial_data
target_link_libraries(HelloWorld
PRIVATE
igl::tutorial_data
)
第二步:在C++代码中使用TUTORIAL_SHARED_PATH
宏即可
igl::readOFF(TUTORIAL_SHARED_PATH "/cube.off", V, F);