CMake 的随机可执行输出

Random executable output with CMake

我可以为每个构建的可执行文件取一个随机名称吗?
或者,换句话说,每个构建操作的可执行文件的名称不同?

我想知道是否可以将随机变量插入到构建工具链中。

之所以取这样的名字是因为我公司的病毒检查速度很慢——检查每个可执行文件都花费了很长时间,甚至比构建还要长。

我在 Win7 上使用 CLion 2016.2,工具链是 MinGW_w64_5.0,捆绑的 CMake 3.5.2

不,你不能。或者您必须为每个构建重新配置。

关于您的实际问题:建议病毒检查程序排除您的构建目录。

您始终可以定义 POST_BUILD 调用另一个 CMake 脚本的步骤。以下方法的唯一缺点是您不能 - 因为它是随机的 - 在 CMake 本身中重用可执行文件的输出名称:

CMakeLists.txt

cmake_minimum_required(VERSION 3.5)

project(RandomExeName)

file(WRITE main.cpp "int main() { return 0; }")

add_executable(${PROJECT_NAME} main.cpp)
add_custom_command(
    TARGET ${PROJECT_NAME} 
    POST_BUILD 
       COMMAND ${CMAKE_COMMAND} -D _file:PATH="$<TARGET_FILE:${PROJECT_NAME}>"
                                -P ${CMAKE_SOURCE_DIR}/CopyToRandom.cmake
)
set_property(TARGET ${PROJECT_NAME} PROPERTY SUFFIX ".temp")

CopyToRandom.cmake

string(RANDOM _random)
file(GLOB _old_files RELATIVE "${CMAKE_BINARY_DIR}" "*.exe")
execute_process(
    COMMAND "${CMAKE_COMMAND}" -E remove ${_old_files}
    COMMAND "${CMAKE_COMMAND}" -E copy "${_file}" "${_random}.exe"
)

# generate shortcut
get_filename_component(_name "${_file}" NAME_WE)
file(
   WRITE "${_name}.sh"
       "#!/bin/bash\n"
       "${_random}.exe"
)