CMAKE_INSTALL_MESSAGE变量不会使文件静默(INSTALL ...)

mbskvtky  于 2022-11-24  发布在  其他
关注(0)|答案(1)|浏览(163)

我在CMake中有一部分代码。它应该将文件从source文件夹复制到destination文件夹,我希望它是无声的。
根据the documentationset (CMAKE_INSTALL_MESSAGE NEVER)应该会让它安静下来。但它没有。
这是代码:

# Silence installation messages
set (SAVE_CMAKE_INSTALL_MESSAGE ${CMAKE_INSTALL_MESSAGE}) # Saving the state
set (CMAKE_INSTALL_MESSAGE NEVER)
message("CMAKE_INSTALL_MESSAGE = ${CMAKE_INSTALL_MESSAGE}") # NEVER

file(INSTALL ${SOURCE} DESTINATION ${DEST} USE_SOURCE_PERMISSIONS)
set (CMAKE_INSTALL_MESSAGE ${SAVE_CMAKE_INSTALL_MESSAGE}) # Restitute

message("CMAKE_INSTALL_MESSAGE = ${CMAKE_INSTALL_MESSAGE}") # <empty>

它不是静默的,它会打印出包含-- Installing: /some/destination/path-- Up-to-date: /some/destination/path的每个文件
有什么办法能关掉那个功能吗?

xqnpmsa8

xqnpmsa81#

documentation表示变量CMAKE_INSTALL_MESSAGE影响install()命令:
指定install()命令生成的安装脚本代码的详细程度
命令file(INSTALL)不受该变量的影响。
如果希望file(INSTALL)是安静的,则使用file(COPY)(其他参数相同)。
关于file(INSTALL)的部分只描述了内部实现的详细程度:
(使用file(INSTALL)命令)
对于CMakeLists.txt CMake中的每个install()调用,都会向安装脚本cmake_install.cmake添加一个对file(INSTALL)的调用。该调用使用了一些 undocumented 参数,其中一个参数指定了详细程度。未记录的参数在用户文档中没有描述,不应在CMake本身之外使用。
也就是说,当阅读文档时,用户可以简单地省略关于file(INSTALL)的部分。不知道为什么文档中描述了内部实现。
例如,调用

install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/text.txt DESTINATION share)

会在cmake_install.cmake中产生下列file(INSTALL)呼叫:

file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share" TYPE FILE FILES "/home/tester/tests/cmake/text.txt")

带有未记录选项TYPE。
相同的调用,但在将CMAKE_INSTALL_MESSAGE变量设置为NEVER后,将生成

file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share" TYPE FILE MESSAGE_NEVER FILES "/home/tester/tests/cmake/text.txt")

使用未记录关键字MESSAGE_NEVER
再次强调,切勿在常规CMake项目中使用这些未记录的选项。

相关问题