我正在尝试为我正在进行的项目学习CMAKE(v2.8.8)。我正在尝试将自定义命令添加到一组资源文件中,这些文件从每个资源生成标头。然后,我想在Visual Studio 2005项目中将这些资源和生成的标题添加到source_groups
这是我到目前为止所拥有的:
SET (MYAPP_RES_FILES
${MYAPP_RES_DIR}/file.1
${MYAPP_RES_DIR}/file.2
${MYAPP_RES_DIR}/file.3
)
MACRO (MYTRANSFORM IN_FILES OUT_HEADERS)
FOREACH (I ${${IN_FILES}})
GET_FILENAME_COMPONENT (IN_FILE ${I} ABSOLUTE)
GET_FILENAME_COMPONENT (OUT_HEADER ${I} NAME_WE)
SET (OUT_HEADER ${CMAKE_CURRENT_BINARY_DIR}/res/generated/gen_${OUT_HEADER}.h)
ADD_CUSTOM_COMMAND (OUTPUT ${OUT_HEADER}
MAIN_DEPENDENCY ${IN_FILE}
COMMAND ${MY_TOOL} -o ${OUT_HEADER} ${IN_FILE}
)
SET(${OUT_HEADERS} ${${OUT_HEADERS}} ${OUT_HEADER})
ENDFOREACH (I)
ENDMACRO (MYTRANSFORM)
SOURCE_GROUP ("res" FILES
${MYAPP_RES_FILES}
)
MYTRANSFORM (MYAPP_RES_FILES MYAPP_RES_HEADER_FILES)
SOURCE_GROUP ("res\\generated" FILES
${MYAPP_RES_HEADER_FILES}
)
SET (MYAPP_FILES ${MYAPP_FILES} ${MYAPP_RES_FILES})
SET (MYAPP_FILES ${MYAPP_FILES} ${MYAPP_RES_HEADER_FILES})
ADD_EXECUTABLE (${MYAPP_PROJECT_NAME} ${MYAPP_FILES})
它似乎有效,但每个res文件都会添加两次到它们的source_group。一个没有自定义命令,另一个没有。如果我删除MAIN_DEPENDENCY ${IN_FILE}
行,则只添加每个资源文件中的一个,但它们没有自定义命令。
非常感谢任何帮助
答案 0 :(得分:0)
将资源文件添加到可执行文件和源组时,似乎存在问题。我放弃了SET (MYAPP_FILES ${MYAPP_FILES} ${MYAPP_RES_FILES})
并解决了问题