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"
)
我可以为每个构建的可执行文件取一个随机名称吗?
或者,换句话说,每个构建操作的可执行文件的名称不同?
我想知道是否可以将随机变量插入到构建工具链中。
之所以取这样的名字是因为我公司的病毒检查速度很慢——检查每个可执行文件都花费了很长时间,甚至比构建还要长。
我在 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"
)