如何根据构建的目标限制 cmake 命令
How to restrict cmake commands based on which target is built
我有一个生成多个可执行文件的 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 文件中存在的所有柯南安装调用都会被调用——所以安装的包比必要的多。
# 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 调用取决于我实际想要构建的目标?
很遗憾,宏conan_cmake_run
没有区分涉及哪个目标,甚至之前执行过。您可以使用 CMake 选项 运行 或不 conan_cmake_run
.
此外,您可以 comment/vote 您的请求彻底解决问题 https://github.com/conan-io/cmake-conan/issues/105
此致!
我有一个生成多个可执行文件的 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 文件中存在的所有柯南安装调用都会被调用——所以安装的包比必要的多。
# 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 调用取决于我实际想要构建的目标?
很遗憾,宏conan_cmake_run
没有区分涉及哪个目标,甚至之前执行过。您可以使用 CMake 选项 运行 或不 conan_cmake_run
.
此外,您可以 comment/vote 您的请求彻底解决问题 https://github.com/conan-io/cmake-conan/issues/105
此致!