【发布时间】:2021-04-07 00:41:15
【问题描述】:
stackoverflow 的长期读者(谢谢大家!),但这是我的第一个问题。
我正在尝试为现有 Xcode 项目创建 CMake 文件。目标是创建一个 *.app 文件(目录似乎更合适),其中包含应用程序运行所需的所有资源。 (或者更准确地说,我们的目标是不使用 Xcode,而是使用 CLion,我已经在 Windows 和 Linux 上的同一个项目中使用了它)
当 CMake 生成代码以复制一些包含特殊字符的文件时,我遇到了问题。 Cmake 运行良好,但是当我尝试构建时出现以下错误:
====================[ Build | MyAppDebug | Debug ]==========================
/Applications/CLion.app/Contents/bin/cmake/mac/bin/cmake --build /Users/<user>/MyApp/cmake-build-debug --target MyAppDebug -- -j 8
CMakeFiles/MyAppDebug.dir/build.make:4112: *** missing separator. Stop.
make[2]: *** [CMakeFiles/MyAppDebug.dir/all] Error 2
make[1]: *** [CMakeFiles/MyAppDebug.dir/rule] Error 2
make: *** [MyAppDebug] Error 2
这是在 build.make 文件中的第 4112 行:
4111.
4112. ../bin/DebugOsx/MyApp.app/Contents/Resources/my\ resource\ folder/file_name#1.gif: /Users/<user>/resources/my\ resource\ folder/file_name#1.gif
4113. @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Copying OS X content ../bin/DebugOsx/MyApp.app/Contents/Resources/my resource folder/file_name#1.gif"
4114. $(CMAKE_COMMAND) -E copy "/Users/<user>/resources/my resource folder/file_name#1.gif" "../bin/DebugOsx/MyApp.app/Contents/Resources/my resource folder/file_name#1.gif"
4115.
如果我通过在第 4112 行的文件名中添加反斜杠来手动转义 #,则这些行在尝试构建时不会出错。
4112. ../bin/DebugOsx/MyApp.app/Contents/Resources/my\ resource\ folder/file_name\#1.gif: /Users/<user>/resources/my\ resource\ folder/file_name\#1.gif
这大致是我的 CMake 文件的外观:(我实际上使用了一堆 globbing 来获取所有文件和相应的文件夹树)
set(TESTFILE "/Users/<user>/resources/my resource folder/file_name#1") #Edit: I tried this with and without escaping
set_property(SOURCE ${TESTFILE} PROPERTY MACOSX_PACKAGE_LOCATION "Resources/my resource folder")
add_executable(MyAppDebug MACOSX_BUNDLE ${SOURCE_LIST} ${TESTFILE})
target_link_libraries(MyAppDebug <some libs>)
set_target_properties(MyAppDebug PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/bin/DebugOsx"
OUTPUT_NAME "MyApp"
MACOSX_BUNDLE TRUE
MACOSX_BUNDLE_BUNDLE_NAME MyApp
MACOSX_BUNDLE_BUNDLE_VERSION 1
MACOSX_BUNDLE_SHORT_VERSION_STRING "1.0.0"
MACOSX_BUNDLE_GUI_IDENTIFIER org.mycompany.myapp
)
注意: 由于兼容性原因,我无法更改文件名。
【问题讨论】:
-
为什么在定义
TESTFILE变量时使用退格键(\)?无需转义双引号字符串中的空格。 -
你说得对,我没有在实际文件中。这只是用最少的代码进行的快速测试,所以我可以把它放在问题中。我将编辑反斜杠。
-
我想知道这是否真的是 cmake 中的一个错误,也许值得打开一个 GitLab 问题?
-
根据that question,似乎CMake没有为Makefile转义哈希符号(
#)。 -
嗯,看起来是这样。我想知道为什么......我猜是去 CMake 论坛!谢谢