使用 CMAKE,我在更改时添加了一个自定义命令 top copy LUA 文件从源目录到输出目录。但是,仅当 Visual Studio 决定构建项目时才会触发此命令(即使我将 PRE_BUILD 用于自定义命令)。Visual Studio 仅在源文件(在本例中为 c++)更改时才决定构建,因此当我仅更改 LUA 文件时,它们不会添加到输出目录中。
现在在 Visual Studio 中,我可以将 LUA 文件属性页中的“项目类型”从“不参与构建”更改为“文本”。在这种情况下,只有 LUA 文件发生更改时,Visual Studio 才会触发构建。那么如何确保 CMAKE 将正确的项目类型分配给 LUA 文件呢?(或者有其他解决方案吗?)
CMakeLists.txt 的相关部分
SET(LUA_Sources
"lua/initialization.lua")
SOURCE_GROUP("lua" FILES ${LUA_Sources})
ADD_LIBRARY(engine
${LUA_Sources})
foreach(LuaFile ${LUA_Sources})
ADD_CUSTOM_COMMAND(
TARGET engine
PRE_BUILD
COMMAND ${CMAKE_COMMAND}
ARGS -E
copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/${LuaFile} ${EXECUTABLE_OUTPUT_PATH}/Debug/${LuaFile})
endforeach()
============================
作为参考,受 Angew 启发的解决方案是
SET(LUA_Sources
"lua/initialization.lua")
SOURCE_GROUP("lua" FILES ${LUA_Sources})
set(LUA_Outputs "")
foreach(LuaFile ${LUA_Sources})
list(APPEND LUA_Outputs ${EXECUTABLE_OUTPUT_PATH}/Debug/${LuaFile})
endforeach()
add_custom_target(
lua ALL
DEPENDS ${LUA_Outputs}
COMMENT "Copying LUA files"
VERBATIM
)
foreach(LuaFile ${LUA_Sources})
ADD_CUSTOM_COMMAND(
TARGET lua
COMMAND ${CMAKE_COMMAND}
ARGS -E
copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/${LuaFile}
endforeach()
我不得不稍微改变一下,因为如果文件较新,文件将不会总是被复制。可能是因为 ADD_CUSTOM_COMMAND 中的 OUTPUT 指令而不是我现在使用的 TARGET 指令。