为什么 Clang 在 OSX 上构建时不为这个 Qt 项目生成 TARGET 目录?
Why doesn't Clang generate the TARGET directory for this Qt project when building on OSX?
我有一个使用以下工具链的项目 (full code here):
- OSX 10.10.5 (Yosemite)
- C++11(似乎仍然比 C++14 有更好的编译器支持)
- Qt 5.5.0(跨平台 GUI 库)
- Qt Creator 3.5.0(IDE 与 Qt 紧密集成)
- QMake(与 Qt 紧密集成的构建工具)
- Clang 6.0 64 位(在 OSX 上使用 Qt Creator 时的默认编译器)
- Xcode 6.1.1(Clang 似乎与 OSX 捆绑在一起的另一个 IDE)
当我尝试构建项目时出现问题。值得注意的是,当我使用 Windows 7 而不是 OSX 和 MingW/GCC 而不是 [=45 时,完全相同的代码和项目文件编译和 link 没有任何错误或警告=].还值得注意的是,当我上次在我的 OSX 机器上开发时,这个完全相同的工具集在几次提交之前就可以工作。如果我不得不猜测,我会说将 "CONFIG += c++11" 行添加到我的项目文件是触发问题的原因(现在无法在不引起其他问题的情况下删除它)。这是输出示例:
09:06:44: Running steps for project AISweeper...
09:06:44: Starting: "/usr/bin/make" clean
rm -f qrc_sweeper_resources.cpp
rm -f moc_player_abstract.cpp moc_player_human.cpp moc_player_machine_learning_ai.cpp moc_player_probability_based_ai.cpp moc_player_random_action_ai.cpp moc_sweeper_batch_manager.cpp moc_sweeper_batch_settings.cpp moc_sweeper_batch_status.cpp moc_sweeper_control_window.cpp moc_sweeper_game.cpp moc_sweeper_widget.cpp
rm -f ui_sweeper_control_window.h
rm -f player_abstract.o player_human.o player_machine_learning_ai.o player_probability_based_ai.o player_random_action_ai.o sweeper_batch_manager.o sweeper_batch_settings.o sweeper_batch_status.o sweeper_common_functions.o sweeper_control_window.o sweeper_game.o sweeper_main.o sweeper_model.o sweeper_node.o sweeper_widget.o qrc_sweeper_resources.o moc_player_abstract.o moc_player_human.o moc_player_machine_learning_ai.o moc_player_probability_based_ai.o moc_player_random_action_ai.o moc_sweeper_batch_manager.o moc_sweeper_batch_settings.o moc_sweeper_batch_status.o moc_sweeper_control_window.o moc_sweeper_game.o moc_sweeper_widget.o
rm -f *~ core *.core
09:06:44: The process "/usr/bin/make" exited normally.
09:06:44: Configuration unchanged, skipping qmake step.
09:06:44: Starting: "/usr/bin/make"
/Users/alexjohnson/Qt/5.5/clang_64/bin/uic ../AISweeper/ui/sweeper_control_window.ui -o ui_sweeper_control_window.h
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -c -pipe -g -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk -std=c++11 -stdlib=libc++ -mmacosx-version-min=10.7 -Wall -W -fPIC -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../AISweeper -I. -I../../../Qt/5.5/clang_64/lib/QtWidgets.framework/Headers -I../../../Qt/5.5/clang_64/lib/QtGui.framework/Headers -I../../../Qt/5.5/clang_64/lib/QtCore.framework/Headers -I. -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/OpenGL.framework/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/AGL.framework/Headers -I. -I../../../Qt/5.5/clang_64/mkspecs/macx-clang -F/Users/alexjohnson/Qt/5.5/clang_64/lib -o player_abstract.o ../AISweeper/src/players/player_abstract.cpp
*snip*
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -c -pipe -g -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk -std=c++11 -stdlib=libc++ -mmacosx-version-min=10.7 -Wall -W -fPIC -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../AISweeper -I. -I../../../Qt/5.5/clang_64/lib/QtWidgets.framework/Headers -I../../../Qt/5.5/clang_64/lib/QtGui.framework/Headers -I../../../Qt/5.5/clang_64/lib/QtCore.framework/Headers -I. -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/OpenGL.framework/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/AGL.framework/Headers -I. -I../../../Qt/5.5/clang_64/mkspecs/macx-clang -F/Users/alexjohnson/Qt/5.5/clang_64/lib -o moc_sweeper_game.o moc_sweeper_game.cpp
/Users/alexjohnson/Qt/5.5/clang_64/bin/moc -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -D__APPLE__ -D__GNUC__=4 -D__APPLE_CC__ -I/Users/alexjohnson/Qt/5.5/clang_64/mkspecs/macx-clang -I/Users/alexjohnson/WORKSPACE_ASJ/GitHub/AISweeper -I/Users/alexjohnson/Qt/5.5/clang_64/lib/QtWidgets.framework/Headers -I/Users/alexjohnson/Qt/5.5/clang_64/lib/QtGui.framework/Headers -I/Users/alexjohnson/Qt/5.5/clang_64/lib/QtCore.framework/Headers -I. -F/Users/alexjohnson/Qt/5.5/clang_64/lib ../AISweeper/inc/sweeper_widget.h -o moc_sweeper_widget.cpp
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -c -pipe -g -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk -std=c++11 -stdlib=libc++ -mmacosx-version-min=10.7 -Wall -W -fPIC -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../AISweeper -I. -I../../../Qt/5.5/clang_64/lib/QtWidgets.framework/Headers -I../../../Qt/5.5/clang_64/lib/QtGui.framework/Headers -I../../../Qt/5.5/clang_64/lib/QtCore.framework/Headers -I. -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/OpenGL.framework/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/AGL.framework/Headers -I. -I../../../Qt/5.5/clang_64/mkspecs/macx-clang -F/Users/alexjohnson/Qt/5.5/clang_64/lib -o moc_sweeper_widget.o moc_sweeper_widget.cpp
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -headerpad_max_install_names -Wl,-syslibroot,/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk -stdlib=libc++ -mmacosx-version-min=10.7 -Wl,-rpath,/Users/alexjohnson/Qt/5.5/clang_64/lib -o AISweeper.app/Contents/MacOS/AISweeper AISweeper player_abstract.o player_human.o player_machine_learning_ai.o player_probability_based_ai.o player_random_action_ai.o sweeper_batch_manager.o sweeper_batch_settings.o sweeper_batch_status.o sweeper_common_functions.o sweeper_control_window.o sweeper_game.o sweeper_main.o sweeper_model.o sweeper_node.o sweeper_widget.o qrc_sweeper_resources.o moc_player_abstract.o moc_player_human.o moc_player_machine_learning_ai.o moc_player_probability_based_ai.o moc_player_random_action_ai.o moc_sweeper_batch_manager.o moc_sweeper_batch_settings.o moc_sweeper_batch_status.o moc_sweeper_control_window.o moc_sweeper_game.o moc_sweeper_widget.o -F/Users/alexjohnson/Qt/5.5/clang_64/lib -stdlib=libc++ -framework QtWidgets -framework QtGui -framework QtCore -framework DiskArbitration -framework IOKit -framework OpenGL -framework AGL
clang: error: no such file or directory: 'AISweeper'
make: *** [AISweeper.app/Contents/MacOS/AISweeper] Error 1
09:07:03: The process "/usr/bin/make" exited with code 2.
Error while building/deploying project AISweeper (kit: Desktop Qt 5.5.0 clang 64bit)
When executing step "Make"
09:07:03: Elapsed time: 00:19.
我很难解释所有这些,但我相信这意味着 Clang 在 linking 时无法在生成的应用程序中找到 'AISweeper' 目录(因此所有 . o 提到的文件)。这似乎是由 QMake 项目文件中的 TARGET 变量控制的。如果我将此变量从 'AISweeper' 更改为 'Foo',则它无法找到 'Foo' 目录。手动检查生成的应用程序后,我可以确认“/Users/alexjohnson/WORKSPACE_ASJ/GitHub/build-AISweeper-Desktop_Qt_5_5_0_clang_64bit-Debug/AISweeper.app/Contents/MacOS/”存在,但其中没有 'AISweeper' 目录。我不确定如何确保它作为构建过程的一部分存在。我也尝试过放弃 Clang 并改用 GCC,但这导致了 C++11、OSX 和 Qt 之间的不兼容问题。我试过用谷歌搜索这个问题,但大多数时候这个错误似乎是在 Clang 找不到第三方库时发生的。就我而言,它似乎无法找到我的项目目录本身。我确实看到有人提到在 Xcode 中打开项目并在那里修改一些设置,但我无法直接使用 Xcode 打开我的项目或找到任何提到的设置。这是我的 QMake 项目文件 (AISweeper.pro) 的内容,以防我在这里尝试修改其他内容:
CONFIG += \
c++11
FORMS += \
ui/sweeper_control_window.ui
HEADERS += \
inc/players/player_abstract.h \
inc/players/player_human.h \
inc/players/player_machine_learning_ai.h \
inc/players/player_probability_based_ai.h \
inc/players/player_random_action_ai.h \
inc/sweeper_batch_manager.h \
inc/sweeper_batch_settings.h \
inc/sweeper_batch_status.h \
inc/sweeper_common_functions.h \
inc/sweeper_control_window.h \
inc/sweeper_game.h \
inc/sweeper_model.h \
inc/sweeper_node.h \
inc/sweeper_widget.h
QT += \
core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
LIBS += \
-stdlib=libc++
RESOURCES += \
rsc/sweeper_resources.qrc
SOURCES += \
src/players/player_abstract.cpp \
src/players/player_human.cpp \
src/players/player_machine_learning_ai.cpp \
src/players/player_probability_based_ai.cpp \
src/players/player_random_action_ai.cpp \
src/sweeper_batch_manager.cpp \
src/sweeper_batch_settings.cpp \
src/sweeper_batch_status.cpp \
src/sweeper_common_functions.cpp \
src/sweeper_control_window.cpp \
src/sweeper_game.cpp \
src/sweeper_main.cpp \
src/sweeper_model.cpp \
src/sweeper_node.cpp \
src/sweeper_widget.cpp
TARGET += \
AISweeper
TEMPLATE += \
app
我还能尝试做些什么来解决这个问题?我只是希望这些工具能够很好地相互配合并构建我的项目,这样我就可以重新开始编码!
我通过在我的项目文件中将 "TARGET +=" 更改为 "TARGET =" 来解决这个问题。这看起来很奇怪,我重新包含了“+”字符,清理并重建了项目以确保“+”字符确实导致了问题。它又开始失败了。我第二次将其删除,清理并再次重建。它又开始工作了。
正如我在问题中提到的,这一直在我的 Windows 机器上运行,没有任何更改(包括“+”字符)。
我不完全理解 QMake 过程,但似乎在某些时候 Clang 必须尝试解析项目文件本身并且以 GCC 没有的方式失败。人们会认为项目文件中的所有变量都将以相同的方式处理(即:您可以使用 += 添加到它们,即使只有一个条目),但似乎有些奇怪的方式TARGET 变量被特殊处理。这可能是 Clang 或 Qt Creator 中的错误,但我不能确定,所以我还不打算报告任何内容。
我很想听听对此行为的更深入解释!
我有一个使用以下工具链的项目 (full code here):
- OSX 10.10.5 (Yosemite)
- C++11(似乎仍然比 C++14 有更好的编译器支持)
- Qt 5.5.0(跨平台 GUI 库)
- Qt Creator 3.5.0(IDE 与 Qt 紧密集成)
- QMake(与 Qt 紧密集成的构建工具)
- Clang 6.0 64 位(在 OSX 上使用 Qt Creator 时的默认编译器)
- Xcode 6.1.1(Clang 似乎与 OSX 捆绑在一起的另一个 IDE)
当我尝试构建项目时出现问题。值得注意的是,当我使用 Windows 7 而不是 OSX 和 MingW/GCC 而不是 [=45 时,完全相同的代码和项目文件编译和 link 没有任何错误或警告=].还值得注意的是,当我上次在我的 OSX 机器上开发时,这个完全相同的工具集在几次提交之前就可以工作。如果我不得不猜测,我会说将 "CONFIG += c++11" 行添加到我的项目文件是触发问题的原因(现在无法在不引起其他问题的情况下删除它)。这是输出示例:
09:06:44: Running steps for project AISweeper...
09:06:44: Starting: "/usr/bin/make" clean
rm -f qrc_sweeper_resources.cpp
rm -f moc_player_abstract.cpp moc_player_human.cpp moc_player_machine_learning_ai.cpp moc_player_probability_based_ai.cpp moc_player_random_action_ai.cpp moc_sweeper_batch_manager.cpp moc_sweeper_batch_settings.cpp moc_sweeper_batch_status.cpp moc_sweeper_control_window.cpp moc_sweeper_game.cpp moc_sweeper_widget.cpp
rm -f ui_sweeper_control_window.h
rm -f player_abstract.o player_human.o player_machine_learning_ai.o player_probability_based_ai.o player_random_action_ai.o sweeper_batch_manager.o sweeper_batch_settings.o sweeper_batch_status.o sweeper_common_functions.o sweeper_control_window.o sweeper_game.o sweeper_main.o sweeper_model.o sweeper_node.o sweeper_widget.o qrc_sweeper_resources.o moc_player_abstract.o moc_player_human.o moc_player_machine_learning_ai.o moc_player_probability_based_ai.o moc_player_random_action_ai.o moc_sweeper_batch_manager.o moc_sweeper_batch_settings.o moc_sweeper_batch_status.o moc_sweeper_control_window.o moc_sweeper_game.o moc_sweeper_widget.o
rm -f *~ core *.core
09:06:44: The process "/usr/bin/make" exited normally.
09:06:44: Configuration unchanged, skipping qmake step.
09:06:44: Starting: "/usr/bin/make"
/Users/alexjohnson/Qt/5.5/clang_64/bin/uic ../AISweeper/ui/sweeper_control_window.ui -o ui_sweeper_control_window.h
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -c -pipe -g -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk -std=c++11 -stdlib=libc++ -mmacosx-version-min=10.7 -Wall -W -fPIC -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../AISweeper -I. -I../../../Qt/5.5/clang_64/lib/QtWidgets.framework/Headers -I../../../Qt/5.5/clang_64/lib/QtGui.framework/Headers -I../../../Qt/5.5/clang_64/lib/QtCore.framework/Headers -I. -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/OpenGL.framework/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/AGL.framework/Headers -I. -I../../../Qt/5.5/clang_64/mkspecs/macx-clang -F/Users/alexjohnson/Qt/5.5/clang_64/lib -o player_abstract.o ../AISweeper/src/players/player_abstract.cpp
*snip*
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -c -pipe -g -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk -std=c++11 -stdlib=libc++ -mmacosx-version-min=10.7 -Wall -W -fPIC -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../AISweeper -I. -I../../../Qt/5.5/clang_64/lib/QtWidgets.framework/Headers -I../../../Qt/5.5/clang_64/lib/QtGui.framework/Headers -I../../../Qt/5.5/clang_64/lib/QtCore.framework/Headers -I. -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/OpenGL.framework/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/AGL.framework/Headers -I. -I../../../Qt/5.5/clang_64/mkspecs/macx-clang -F/Users/alexjohnson/Qt/5.5/clang_64/lib -o moc_sweeper_game.o moc_sweeper_game.cpp
/Users/alexjohnson/Qt/5.5/clang_64/bin/moc -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -D__APPLE__ -D__GNUC__=4 -D__APPLE_CC__ -I/Users/alexjohnson/Qt/5.5/clang_64/mkspecs/macx-clang -I/Users/alexjohnson/WORKSPACE_ASJ/GitHub/AISweeper -I/Users/alexjohnson/Qt/5.5/clang_64/lib/QtWidgets.framework/Headers -I/Users/alexjohnson/Qt/5.5/clang_64/lib/QtGui.framework/Headers -I/Users/alexjohnson/Qt/5.5/clang_64/lib/QtCore.framework/Headers -I. -F/Users/alexjohnson/Qt/5.5/clang_64/lib ../AISweeper/inc/sweeper_widget.h -o moc_sweeper_widget.cpp
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -c -pipe -g -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk -std=c++11 -stdlib=libc++ -mmacosx-version-min=10.7 -Wall -W -fPIC -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../AISweeper -I. -I../../../Qt/5.5/clang_64/lib/QtWidgets.framework/Headers -I../../../Qt/5.5/clang_64/lib/QtGui.framework/Headers -I../../../Qt/5.5/clang_64/lib/QtCore.framework/Headers -I. -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/OpenGL.framework/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/AGL.framework/Headers -I. -I../../../Qt/5.5/clang_64/mkspecs/macx-clang -F/Users/alexjohnson/Qt/5.5/clang_64/lib -o moc_sweeper_widget.o moc_sweeper_widget.cpp
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -headerpad_max_install_names -Wl,-syslibroot,/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk -stdlib=libc++ -mmacosx-version-min=10.7 -Wl,-rpath,/Users/alexjohnson/Qt/5.5/clang_64/lib -o AISweeper.app/Contents/MacOS/AISweeper AISweeper player_abstract.o player_human.o player_machine_learning_ai.o player_probability_based_ai.o player_random_action_ai.o sweeper_batch_manager.o sweeper_batch_settings.o sweeper_batch_status.o sweeper_common_functions.o sweeper_control_window.o sweeper_game.o sweeper_main.o sweeper_model.o sweeper_node.o sweeper_widget.o qrc_sweeper_resources.o moc_player_abstract.o moc_player_human.o moc_player_machine_learning_ai.o moc_player_probability_based_ai.o moc_player_random_action_ai.o moc_sweeper_batch_manager.o moc_sweeper_batch_settings.o moc_sweeper_batch_status.o moc_sweeper_control_window.o moc_sweeper_game.o moc_sweeper_widget.o -F/Users/alexjohnson/Qt/5.5/clang_64/lib -stdlib=libc++ -framework QtWidgets -framework QtGui -framework QtCore -framework DiskArbitration -framework IOKit -framework OpenGL -framework AGL
clang: error: no such file or directory: 'AISweeper'
make: *** [AISweeper.app/Contents/MacOS/AISweeper] Error 1
09:07:03: The process "/usr/bin/make" exited with code 2.
Error while building/deploying project AISweeper (kit: Desktop Qt 5.5.0 clang 64bit)
When executing step "Make"
09:07:03: Elapsed time: 00:19.
我很难解释所有这些,但我相信这意味着 Clang 在 linking 时无法在生成的应用程序中找到 'AISweeper' 目录(因此所有 . o 提到的文件)。这似乎是由 QMake 项目文件中的 TARGET 变量控制的。如果我将此变量从 'AISweeper' 更改为 'Foo',则它无法找到 'Foo' 目录。手动检查生成的应用程序后,我可以确认“/Users/alexjohnson/WORKSPACE_ASJ/GitHub/build-AISweeper-Desktop_Qt_5_5_0_clang_64bit-Debug/AISweeper.app/Contents/MacOS/”存在,但其中没有 'AISweeper' 目录。我不确定如何确保它作为构建过程的一部分存在。我也尝试过放弃 Clang 并改用 GCC,但这导致了 C++11、OSX 和 Qt 之间的不兼容问题。我试过用谷歌搜索这个问题,但大多数时候这个错误似乎是在 Clang 找不到第三方库时发生的。就我而言,它似乎无法找到我的项目目录本身。我确实看到有人提到在 Xcode 中打开项目并在那里修改一些设置,但我无法直接使用 Xcode 打开我的项目或找到任何提到的设置。这是我的 QMake 项目文件 (AISweeper.pro) 的内容,以防我在这里尝试修改其他内容:
CONFIG += \
c++11
FORMS += \
ui/sweeper_control_window.ui
HEADERS += \
inc/players/player_abstract.h \
inc/players/player_human.h \
inc/players/player_machine_learning_ai.h \
inc/players/player_probability_based_ai.h \
inc/players/player_random_action_ai.h \
inc/sweeper_batch_manager.h \
inc/sweeper_batch_settings.h \
inc/sweeper_batch_status.h \
inc/sweeper_common_functions.h \
inc/sweeper_control_window.h \
inc/sweeper_game.h \
inc/sweeper_model.h \
inc/sweeper_node.h \
inc/sweeper_widget.h
QT += \
core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
LIBS += \
-stdlib=libc++
RESOURCES += \
rsc/sweeper_resources.qrc
SOURCES += \
src/players/player_abstract.cpp \
src/players/player_human.cpp \
src/players/player_machine_learning_ai.cpp \
src/players/player_probability_based_ai.cpp \
src/players/player_random_action_ai.cpp \
src/sweeper_batch_manager.cpp \
src/sweeper_batch_settings.cpp \
src/sweeper_batch_status.cpp \
src/sweeper_common_functions.cpp \
src/sweeper_control_window.cpp \
src/sweeper_game.cpp \
src/sweeper_main.cpp \
src/sweeper_model.cpp \
src/sweeper_node.cpp \
src/sweeper_widget.cpp
TARGET += \
AISweeper
TEMPLATE += \
app
我还能尝试做些什么来解决这个问题?我只是希望这些工具能够很好地相互配合并构建我的项目,这样我就可以重新开始编码!
我通过在我的项目文件中将 "TARGET +=" 更改为 "TARGET =" 来解决这个问题。这看起来很奇怪,我重新包含了“+”字符,清理并重建了项目以确保“+”字符确实导致了问题。它又开始失败了。我第二次将其删除,清理并再次重建。它又开始工作了。
正如我在问题中提到的,这一直在我的 Windows 机器上运行,没有任何更改(包括“+”字符)。
我不完全理解 QMake 过程,但似乎在某些时候 Clang 必须尝试解析项目文件本身并且以 GCC 没有的方式失败。人们会认为项目文件中的所有变量都将以相同的方式处理(即:您可以使用 += 添加到它们,即使只有一个条目),但似乎有些奇怪的方式TARGET 变量被特殊处理。这可能是 Clang 或 Qt Creator 中的错误,但我不能确定,所以我还不打算报告任何内容。
我很想听听对此行为的更深入解释!