xmake-io / xmake-vscode

🍩 A XMake integration in Visual Studio Code
https://xmake.io
Apache License 2.0
223 stars 55 forks source link

Incorrect compile_commands generated for Qt framework projects #132

Open paul-reilly opened 1 year ago

paul-reilly commented 1 year ago

Xmake Version

2.6.9

Operating System Version and Architecture

5.17.15-1-Manjaro x86_64

Describe Bug

xmake correctly generates compile_commands.json files with xmake project -k compile_commands. The vscode plugin generates incorrect (for Linux) compile_commands files when using Qt frameworks. The files contain Darwin -framework directives.

Working xmake compile_commands:

[
{
  "directory": "/home/dev/dev/sandpit/qtcc",
  "arguments": ["/usr/bin/gcc", "-c", "-m64", "-g", "-O0", "-std=c++11", "-I/home/dev/dev/sandpit/qtcc/build/.gens/qtcc/linux/x86_64/debug/rules/qt/ui", "-DQT_QML_DEBUG", "-DQT_DEPRECATED_WARNINGS", "-DQT_OPENGL_LIB", "-DQT_NETWORK_LIB", "-DQT_GUI_LIB", "-DQT_WIDGETS_LIB", "-DQT_CORE_LIB", "-I", "/usr/include/qt/QtOpenGL", "-I", "/usr/include/qt/QtOpenGL/5.15.5", "-I", "/usr/include/qt/QtOpenGL/5.15.5/QtOpenGL", "-I", "/usr/include/qt/QtNetwork", "-I", "/usr/include/qt/QtNetwork/5.15.5", "-I", "/usr/include/qt/QtNetwork/5.15.5/QtNetwork", "-I", "/usr/include/qt/QtGui", "-I", "/usr/include/qt/QtGui/5.15.5", "-I", "/usr/include/qt/QtGui/5.15.5/QtGui", "-I", "/usr/include/qt/QtWidgets", "-I", "/usr/include/qt/QtWidgets/5.15.5", "-I", "/usr/include/qt/QtWidgets/5.15.5/QtWidgets", "-I", "/usr/include/qt/QtCore", "-I", "/usr/include/qt/QtCore/5.15.5", "-I", "/usr/include/qt/QtCore/5.15.5/QtCore", "-I", "/usr/include/qt", "-I", "/usr/lib/qt/mkspecs/linux-g++", "-fPIC", "-o", "build/.objs/qtcc/linux/x86_64/debug/src/main.cpp.o", "src/main.cpp"],
  "file": "src/main.cpp"
}]

Not working xmake-vscode generated compile_commands:

[
{
  "directory": "/home/dev/dev/sandpit/qtcc",
  "arguments": ["/usr/bin/gcc", "-c", "-m64", "-I/home/dev/dev/sandpit/qtcc/build/.gens/qtcc/linux/x86_64/debug/rules/qt/ui", "-framework", "QtCore", "-framework", "QtWidgets", "-framework", "QtGui", "-framework", "QtOpenGL", "-framework", "QtNetwork", "-framework", "qtmultimedia5", "-o", "build/.objs/qtcc/linux/x86_64/debug/src/main.cpp.o", "src/main.cpp"],
  "file": "src/main.cpp"
}]

Expected Behavior

The same files to be generated by the plugin as xmake. At least the same include directories, because that's what vscode mostly uses the files for.

Project Configuration

xmake.lua

add_rules("mode.debug", "mode.release")

target("qtcc")
    add_rules("qt.widgetapp")
    add_frameworks("QtCore", "QtWidgets", "QtGui", "QtOpenGL", "QtNetwork", "qtmultimedia5")
    add_files("src/*.cpp")

Additional Information and Error Logs

n/a

waruqi commented 1 year ago

It works for me on ubuntu.

[
{
  "directory": "/tmp/test",
  "arguments": ["/usr/bin/gcc", "-c", "-m64", "-fvisibility=hidden", "-fvisibility-inlines-hidden", "-O3", "-std=c++11", "-I/tmp/test/build/.gens/qtcc/linux/x86_64/release/rules/qt/ui", "-DQT_NO_DEBUG", "-DQT_DEPRECATED_WARNINGS", "-DQT_OPENGL_LIB", "-DQT_NETWORK_LIB", "-DQT_GUI_LIB", "-DQT_WIDGETS_LIB", "-DQT_CORE_LIB", "-I", "/usr/include/x86_64-linux-gnu/qt5/QtOpenGL", "-I", "/usr/include/x86_64-linux-gnu/qt5/QtNetwork", "-I", "/usr/include/x86_64-linux-gnu/qt5/QtGui", "-I", "/usr/include/x86_64-linux-gnu/qt5/QtWidgets", "-I", "/usr/include/x86_64-linux-gnu/qt5/QtCore", "-I", "/usr/include/x86_64-linux-gnu/qt5", "-I", "/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++", "-DNDEBUG", "-fPIC", "-o"],
  "file": "src/main.cpp"
},
{
  "directory": "/tmp/test",
  "arguments": ["/usr/bin/gcc", "-c", "-m64", "-fvisibility=hidden", "-fvisibility-inlines-hidden", "-O3", "-std=c++11", "-I/tmp/test/build/.gens/qtcc/linux/x86_64/release/rules/qt/ui", "-DQT_NO_DEBUG", "-DQT_DEPRECATED_WARNINGS", "-DQT_OPENGL_LIB", "-DQT_NETWORK_LIB", "-DQT_GUI_LIB", "-DQT_WIDGETS_LIB", "-DQT_CORE_LIB", "-I", "/usr/include/x86_64-linux-gnu/qt5/QtOpenGL", "-I", "/usr/include/x86_64-linux-gnu/qt5/QtNetwork", "-I", "/usr/include/x86_64-linux-gnu/qt5/QtGui", "-I", "/usr/include/x86_64-linux-gnu/qt5/QtWidgets", "-I", "/usr/include/x86_64-linux-gnu/qt5/QtCore", "-I", "/usr/include/x86_64-linux-gnu/qt5", "-I", "/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++", "-DNDEBUG", "-fPIC", "-o", "build/.objs/qtcc/linux/x86_64/release/src/main.cpp.o", "src/main.cpp"],
  "file": "src/main.cpp"
}]