我正在尝试使用以下命令在cmake中构建docker映像:
add_custom_target(module_tests
COMMAND cp -r ${FFMPEG} .
COMMAND cp ${FFMPEG_SO_INSTALL} ${FFMPEG}/lib
COMMAND docker build -t moduletest -f Dockerfile .
)
但是在手动运行docker build时,我说/bin/sh: 1: docker: not found
时出错。
答案 0 :(得分:0)
要详细介绍excellent comment of Tsyvarev,您的代码应更像
find_program(Docker_EXECUTABLE docker)
if(NOT Docker_EXECUTABLE)
message(FATAL_ERROR "Cannot find the docker executable!")
endif()
add_custom_target(module_tests
COMMAND ${CMAKE_COMMAND} -E copy_directory ${FFMPEG} ${CMAKE_CURRENT_LIST_DIR}
COMMAND ${CMAKE_COMMAND} -E copy ${FFMPEG_SO_INSTALL} ${FFMPEG}/lib
COMMAND ${Docker_EXECUTABLE} build --tag moduletest --file
${CMAKE_CURRENT_LIST_DIR}/Dockerfile ${CMAKE_CURRENT_LIST_DIR}
)
此代码可跨平台移植。此外,如果未找到 Docker ,此代码将在 CMake时间(即很早)期间生成清晰的错误消息。
最后,到您要提问的地方,documentation of find_program解释了它的工作原理以及查找程序的位置。例如,您将看到搜索了变量CMAKE_PROGRAM_PATH
中的路径,因此您可以做的是从外壳程序中which docker
,然后使用which
打印的路径,您可以使用类似
cmake
cmake -DCMAKE_PROGRAM_PATH=/dockerDirectory/printed/by/which ..
假设CMakeLists.txt
位于目录..
奖金:考虑使用${CMAKE_COMMAND} -E copy_if_different
代替copy
。