CMake的随机可执行输出

时间:2016-07-15 08:47:16

标签: cmake clion

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

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

这个名字的原因是我公司的病毒检查速度很慢 - 检查每个可执行文件花了很长时间,甚至比构建版本更长。

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

2 个答案:

答案 0 :(得分:2)

您始终可以定义调用另一个CMake脚本的POST_BUILD步骤。以下方法的唯一缺点是您无法 - 因为它是随机的 - 在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"
)

答案 1 :(得分:1)

不,你不能。或者你必须为每个版本重新配置。

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