0

我有一个生成多个可执行文件的 cmake 项目。我想将每个可执行文件打包在单独的 Docker 容器中,所以在 Dockefile 中,我只构建了我需要的目标:

RUN mkdir build \
    && cd build \
    && cmake /app/project -DCMAKE_BUILD_TYPE=Release
    && make -j 2 myExecutable \
    && make install/fast

这按预期工作,但我遇到了conan cmake integration的问题。安装是在调用 cmake 时完成的,而不是在实际构建期间完成 - 这意味着无论我要实际构建哪个目标,都会调用我的 cmake 文件中存在的所有 conan 安装调用 - 因此安装的软件包比必要的要多。

# for every target
# include conan dependencies (each target has its own conanfile.txt)
conan_cmake_run(CONANFILE conanfile.txt
        BASIC_SETUP CMAKE_TARGETS
        BUILD_TYPE "${CMAKE_BUILD_TYPE}"
        BUILD outdated
        ${update_conan}
        )
conan_target_link_libraries(${PROJECT_NAME})

有没有办法让 cmake 调用取决于我实际想要构建的目标?

4

1 回答 1

0

不幸的是,宏conan_cmake_run没有区分涉及哪个目标,甚至没有区分之前执行过的目标。您可以使用 CMake 选项来运行或不运行conan_cmake_run

此外,您可以通过问题https://github.com/conan-io/cmake-conan/issues/105评论/投票您的请求

问候!

于 2019-02-20T15:52:22.537 回答