此问题已在此处有答案:
How to copy DLL files into the same folder as the executable using CMake?(12个回答)
2个月前关闭。
第一次在Visual Studio 2022中尝试CMAKE项目,我试图调整CmakeLists.txt
from this repository以使用Open3D library。
据我所知,下面的部分意味着在Windows上,如果Open3D是作为共享库构建的,那么.dll文件应该被复制到项目的输出文件夹中。
if(WIN32)
get_target_property(open3d_type Open3D::Open3D TYPE)
if(open3d_type STREQUAL "SHARED_LIBRARY")
message(STATUS "Copying Open3D.dll to ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>")
add_custom_command(TARGET Draw POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_INSTALL_PREFIX}/bin/Open3D.dll
${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>)
endif()
endif()
然而,在我的机器上,变量${CMAKE_INSTALL_PREFIX}
指向<project-root>/out/install/x64-debug
,这似乎是从VS2022(?).
我所做的
到目前为止,我已经将系统变量添加到我的Windows环境变量中,称为OPEN3D_DIR
,它指向open3d二进制文件的根(=包含bin,CMake,包含库的lib文件夹的文件夹)与find_package(OPEN3D REQUIRED)
似乎可以工作,但是在脚本中,变量${OPEN3D_DIR}
指向<OPEN3D-root>/CMake
基本上,简而言之,我的问题是如何找到包路径通常是处理,从哪里来的${CMAKE_INSTALL_PREFIX}
的值,一般来说,如何设置变量,这通常是在CMAKE GUI设置?
1条答案
按热度按时间8dtrkrch1#
您可以使用
$<TARGET_FILE:Open3D::Open3D>
从目标获取DLL的路径,也可以将输出目录简化为$<TARGET_FILE_DIR:Draw>
copy_if_different
可能比copy
更好,可以让你的构建更快一些。例如:
更多有用的表达式请参见https://cmake.org/cmake/help/latest/manual/cmake-generator-expressions.7.html。