关于ExternalProject_Add的注意事项

由于测试的工程比较大,而对于依赖的open3d又是经过了自己修改的,因此,就想把open3d修改后的代码直接放入到本大工程的thirdparty中来尝试。
用到了ExternalProject_Add这个强大的代码,官网:
https://cmake.org/cmake/help/latest/module/ExternalProject.html

使用时,要注意:
1、每个选项后面不要用双引号包住内容,如:

set(libopen3d_install ${CMAKE_CURRENT_SOURCE_DIR}/libopen3d/install)
set(open3d_src_dir ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/Open3D)
set(open3d_build_dir ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/Open3D/build)
set(open3d_config_cmd cd ${open3d_src_dir}/build  && cmake -DGLIBCXX_USE_CXX11_ABI=ON -DCMAKE_INSTALL_PREFIX=${libopen3d_install} .. )
set(open3d_build_cmd  cd ${open3d_src_dir}/build &&  make)

ExternalProject_Add(
    Open3D
    PREFIX Open3D
    SOURCE_DIR ${open3d_src_dir}
    # DOWNLOAD_DIR "${OPEN3D_THIRD_PARTY_DOWNLOAD_DIR}/qhull"
    UPDATE_COMMAND ""
    CONFIGURE_COMMAND "${open3d_config_cmd}"
    BUILD_COMMAND "${open3d_build_cmd}"
    INSTALL_COMMAND "make install"
    # CMAKE_ARGS "-DGLIBCXX_USE_CXX11_ABI=ON -DCMAKE_INSTALL_PREFIX:PATH=${libopen3d_install}"
)

这样是可以的,但是如果:

set(open3d_config_cmd "cd ${open3d_src_dir}/build  && cmake -DGLIBCXX_USE_CXX11_ABI=ON -DCMAKE_INSTALL_PREFIX=${libopen3d_install} .. ")

则会出现/bin/sh: -1 … not found 的问题。

2、CONFIGURE_COMMAND,BUILD_COMMAND,INSTALL_COMMAND 这几个选项按照自己的想法配置就好了,反正就是一步步执行下来。如果一步都没有写,都是空字符串,则什么都不会做。

3、附上open3d.cmake内容


include(ExternalProject)

#-----------open3d-----------------//
set(libopen3d_install ${CMAKE_CURRENT_SOURCE_DIR}/libopen3d/install)
set(open3d_src_dir ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/Open3D)
set(open3d_build_dir ${open3d_src_dir}/build)
set(open3d_config_cmd  cd ${open3d_src_dir} && mkdir build && cd build  && cmake 
                       -DBUILD_SHARED_LIBS=ON
                       -DBUILD_EXAMPLES=OFF 
                       -DBUILD_PYTHON_MODULE=OFF
                       -DGLIBCXX_USE_CXX11_ABI=ON 
                       -DCMAKE_INSTALL_PREFIX=${libopen3d_install} .. )
set(open3d_build_cmd  cd ${open3d_build_dir} &&  make -j4)
set(open3d_install_cmd cd ${open3d_build_dir} && make install)
ExternalProject_Add(
    Open3D
    PREFIX Open3D
    SOURCE_DIR ${open3d_src_dir}
    UPDATE_COMMAND ""
    CONFIGURE_COMMAND "${open3d_config_cmd}"
    BUILD_COMMAND "${open3d_build_cmd}"
    INSTALL_COMMAND "${open3d_install_cmd}"
    # CMAKE_ARGS "-DGLIBCXX_USE_CXX11_ABI=ON -DCMAKE_INSTALL_PREFIX:PATH=${libopen3d_install}"
)

include_directories(
    "${libopen3d_install}/include"    
    "${libopen3d_install}/include/open3d/3rdparty"    
)

link_directories(
    "${libopen3d_install}/lib"
)

set(ext_open3d_lib ${libopen3d_install}/lib/libOpen3D.so)

上面为啥要生成so呢,因为生成的静态库,在下面的可执行程序链接这个静态库时,会报omp及其他undefined的错误。

在主的
CMakeLists.txt中:

include(cmake/open3d.cmake)
add_executable(test_mesh test/test_mesh.cpp)
target_link_libraries(test_mesh ${ext_open3d_lib})
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值