【发布时间】:2019-07-14 08:20:03
【问题描述】:
我有一个生成多个可执行文件的 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 调用取决于我实际要构建的目标?
【问题讨论】:
-
如果我正确理解了柯南打包机制,那么需要先构建一个包,然后才能从中提取链接库列表和包含目录乙>。因此,对于柯南来说,将包的构建推迟到用户项目构建之前为时已晚。配置 CMake 项目后,它应该包含完整的链接库列表和搜索标题的目录每个目标,无论目标是否被构建。
-
@Tsyvarev 是的,这正是问题所在。它需要在配置时执行此操作。但也许有一种通用的 cmake 方式来说明首先要配置哪些目标,并以此为条件调用。理想情况下,通过使用一些内置机制,而不仅仅是定义一个选项。