我正在尝试将我们的Qt应用程序转换为CMake,其中一个目标是OS X应用程序.它需要将某个文件夹放在其our.app/Contents/Resources文件夹中.我尝试使用文件属性添加它,但我只设法复制文件夹本身没有它的内容.如何递归复制?
这是我做的:
,但感觉不对.
set (
RES_SOURCES
${SOURCE_ROOT}/data-folder
)
add_executable(${PROJECT_NAME} MACOSX_BUNDLE ${SRC} ${RES_SOURCES})
SET_SOURCE_FILES_PROPERTIES(${RES_SOURCES} PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
小智 5
正如已经提到的,您可以使用 获取目录内所有文件的列表file(GLOB_RECURSE RES_SOURCES "${SOURCE_ROOT}/data-folder/*")。使用SET_SOURCE_FILES_PROPERTIES(${RES_SOURCES} PROPERTIES MACOSX_PACKAGE_LOCATION Resources)为列表中的每个文件设置相同的位置属性${RES_SOURCES}(在本例中将所有文件放入平面结构中Resources)。
此命令不考虑 的结构data-folder,如果您想复制文件和目录结构,则必须自己指定:
#Get a list of all of the files in the data-folder
file(GLOB_RECURSE RES_SOURCES "${SOURCE_ROOT}/data-folder/*")
#Add our executable, and all of the files as "Source Files"
add_executable(${PROJECT_NAME} MACOSX_BUNDLE ${SRC} ${RES_SOURCES})
#individually set the file's path properties
foreach(RES_FILE ${RES_SOURCES})
#Get the relative path from the data-folder to the particular file
file(RELATIVE_PATH RES_PATH "${SOURCE_ROOT}/data-folder" ${RES_FILE})
#Set it's location inside the app package (under Resources)
set_property(SOURCE ${RES_FILE} PROPERTY MACOSX_PACKAGE_LOCATION "Resources/${RES_PATH}")
endforeach(RES_FILE)
Run Code Online (Sandbox Code Playgroud)
此代码片段会将 的内容复制data-folder到Resources应用程序中的文件夹中,并保留结构,就像您期望复制命令所做的那样。
2021 年的答案:Alex Hamilton 的解决方案为每个文件生成了冗余文件夹 - 我已经更正了他的代码,这样就不会发生这种情况。我还将这些文件分组到 Xcode 中的“Resources”文件夹中,因为否则它们会显示为平面列表。
# Get a list of all of the files in the data-folder.
file(GLOB_RECURSE RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/data-folder/*")
# Add our executable, and all of the files as "Source Files".
add_executable(YourApp ${RESOURCES})
# Individually set the file's path properties.
foreach (FILE ${RESOURCES})
# Get the relative path from the data-folder to the particular file.
file(RELATIVE_PATH NEW_FILE "${CMAKE_CURRENT_SOURCE_DIR}/data-folder" ${FILE})
# Get the relative path to the file.
get_filename_component(NEW_FILE_PATH ${NEW_FILE} DIRECTORY)
# Set it's location inside the app package (under Resources).
set_property(SOURCE ${FILE} PROPERTY MACOSX_PACKAGE_LOCATION "Resources/${NEW_FILE_PATH}")
# Optional: Add the file to the 'Resources' folder group in Xcode.
# This also preserves folder structure.
source_group("Resources/${NEW_FILE_PATH}" FILES "${FILE}")
endforeach ()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
781 次 |
| 最近记录: |