在cmake中运行docker build

时间:2018-07-23 08:10:07

标签: docker cmake

我正在尝试使用以下命令在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时出错。

1 个答案:

答案 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