Ale*_*ban 9 windows dll boost cmake
我在Windows上使用CMake来构建基于Boost.Test的测试套件.当我正在动态链接到Boost.Test时,我的可执行文件需要能够找到DLL(在../../../boost/boost_1_47/lib下或类似于可执行文件的那些).
所以我需要将DLL复制到可执行文件所在的文件夹中,或者以其他方式查找它.使用CMake实现这一目标的最佳方法是什么?
- 附加信息 -
我的CMakeLists.txt目前有这个与Boost相关的配置:
set(Boost_ADDITIONAL_VERSIONS "1.47" "1.47.0")
set(BOOST_ROOT "../boost")
find_package(Boost 1.47 COMPONENTS unit_test_framework REQUIRED)
include_directories(${Boost_INCLUDE_DIR})
link_directories(${Boost_LIBRARY_DIR})
add_executable(test-suite test-suite.cpp)
target_link_libraries(test-suite ${Boost_LIBRARIES})
Run Code Online (Sandbox Code Playgroud)
假设您通过在Visual Studio中构建RUN_TESTS目标来运行测试:
我总是...... /升压/ boost_1_47/lib目录添加到我的命令PATH环境变量,所以升压unit_test_framework的dll可以在运行时被发现.这就是我推荐的.
如果由于某种原因无法更改PATH,则可以使用cmake复制文件.
(另)
get_filename_component(LIBNAME "${Boost_UNIT_TEST_FRAMEWORK_LIBRARY_RELEASE}" NAME)
add_custom_command(TARGET test-suite POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy "${Boost_UNIT_TEST_FRAMEWORK_LIBRARY_RELEASE}" "${CMAKE_CURRENT_BINARY_DIR}/${LIBNAME}"
)
Run Code Online (Sandbox Code Playgroud)
3.如果你不只是运行在构建时的测试(如我上面假设),那么你就需要一系列的INSTALL命令,比如汉斯帕桑特建议.在您的代码段中,您没有INSTALL可执行文件的命令; 所以即使你的可执行文件也不会"在可执行文件夹中".首先添加一个cmake INSTALL命令,将您的可执行文件置于某个位置以响应cmake INSTALL目标.一旦你有了这个工作,我们就可以着手搞清楚如何添加另一个INSTALL命令,将boost unit_test_framework库放到同一个位置.之后,如果要使用CPACK创建安装程序,则库将自动与可执行文件一起安装.
我最终使用install命令将 Boost DLL 复制到可执行文件的文件夹:
get_filename_component(UTF_BASE_NAME ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY_RELEASE} NAME_WE)
get_filename_component(UTF_PATH ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY_RELEASE} PATH)
install(FILES ${UTF_PATH}/${UTF_BASE_NAME}.dll
DESTINATION ../bin
CONFIGURATIONS Release RelWithDebInfo
)
get_filename_component(UTF_BASE_NAME_DEBUG ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY_DEBUG} NAME_WE)
install(FILES ${UTF_PATH}/${UTF_BASE_NAME_DEBUG}.dll
DESTINATION ../bin
CONFIGURATIONS Debug
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3916 次 |
| 最近记录: |