2016-07-15 55 views
1

我可以爲每個版本的可執行文件指定一個隨機名稱嗎?或者,換句話說,每個構建操作的可執行文件的名稱不同?CMake的隨機可執行文件輸出

我不知道是否可以將一個隨機變量插入到構建工具鏈中。

這樣一個名字的原因是我公司的病毒檢查速度很慢 - 檢查每個可執行文件需要很長時間,甚至比構建時間還要長。

我使用的克利翁2016.2 Win7上,工具鏈是MinGW_w64_5.0,捆綁的CMake 3.5.2

+0

原來慢刪除exe文件的原因是---「應用程序體驗」服務。 http://superuser.com/a/239164/446855 – caoanan

回答

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

你就是不行。或者你必須重新配置每個版本。

關於您的實際問題:建議病毒檢查程序排除您的構建目錄。

+0

我正在嘗試使用CMake字符串(TIMESTAMP ...)或字符串(RANDOM ...) – caoanan

+0

它們將在配置期間進行評估並保留,直到您重新運行CMake。 – usr1234567