From ebd5f8addc6d58c44b68f28c01147ede12347e6f Mon Sep 17 00:00:00 2001 From: Mitchell Hentges Date: Mon, 20 Nov 2023 21:06:03 +0100 Subject: [PATCH] Add docs to use with Visual Studio (and link to gtk4-rs book for Rust) It's unclear how to use `gvsbuild` with Visual Studio, especially for users who aren't used to Windows-based development. The most-relevant bug I could find was this one [2], but it recommended using `ninja` and lost me :) So, I think that having a "hand-off" part at the end of the build docs that guide users to their language-specific next steps (C, Rust, etc) could be helpful! The Visual Studio steps are based off of this 10-year-old Stack Overflow post [1]. I moved the `LIB` and `INCLUDE` recommendation down since they're mostly needed for PyGObject. Finally, I thought that it could be good to recommend setting the environment variables in the Control Panel instead of via `$env:Path = ...` so that: * It would be persistent, and * It would be system-wide (Command Prompt, Powershell, IDEs, etc) [1] https://stackoverflow.com/questions/15906580/how-to-configure-gtk-on-visual-studio-2010 [2] https://github.com/wingtk/gvsbuild/issues/405 --- README.md | 55 ++++++++++++++++-- doc/visual-studio-project-context-menu.png | Bin 0 -> 11986 bytes ...isual-studio-properties-c-command-line.png | Bin 0 -> 23762 bytes 3 files changed, 51 insertions(+), 4 deletions(-) create mode 100644 doc/visual-studio-project-context-menu.png create mode 100644 doc/visual-studio-properties-c-command-line.png diff --git a/README.md b/README.md index 99b9eee76..7f8c558eb 100644 --- a/README.md +++ b/README.md @@ -131,15 +131,62 @@ Grab a coffee, the build will take a few minutes to complete. #### Add GTK to Your Environmental Variables +1. From the Start menu, go to the Control Panel entry for “Edit environment variables for your account”. +2. Double-click the `Path` row in the top list of variables. Click “New” to add a new item to the list. +3. Paste in `C:\gtk-build\gtk\x64\release\bin` +4. Click "OK" twice. + +#### Using GTK with Visual Studio + +1. Open Visual Studio and "Create a new project" using the "Empty Project" template +2. On the left, right click on "Source Files" and choose "Add", then "New Item..." and replace the name with `main.c` +3. Paste in the following contents, then save the file: + + ``` + #include + + static void activate_cb(GtkApplication *app) { + GtkWidget *window = gtk_application_window_new(app); + gtk_widget_set_visible(window, true); + } + + int main(int argc, char **argv) { + GtkApplication *app = + gtk_application_new("org.app", G_APPLICATION_DEFAULT_FLAGS); + g_signal_connect(app, "activate", G_CALLBACK(activate_cb), NULL); + return g_application_run(G_APPLICATION(app), argc, argv); + } + ``` + +4. Go to your project's settings by right-clicking and choosing "Properties" + + ![screenshot showing the properties item is at the bottom of the context menu](doc/visual-studio-project-context-menu.png) + +5. On the left, open "C/C++", then choose "Command Line". + 1. Open "Powershell" and run the command `pkg-config --cflags gtk4 --msvc-syntax` + 2. Paste the result into the "Additional Options" field at the bottom of the Visual Studio Properties window. + + ![screenshot showing the "Additional Options" field to modify](doc/visual-studio-properties-c-command-line.png) + +6. Still in the Visual Studio window, click on "Linker" and choose "Command Line". Do the same thing as the last step, except use the output of `pkg-config --libs gtk4 --msvc-syntax` +7. Click "OK" +8. In the top menu bar, click "Debug" and "Start Without Debugging" + +#### Using GTK with Rust + +See [the fantastic `gtk-rs` book](https://gtk-rs.org/gtk4-rs/stable/latest/book). +You can skip the "Install GTK 4" step, as the above steps ^ covered that. + +#### Use PyGObject + +First, add GTK to your environment variables: + ```PowerShell -$env:Path = "C:\gtk-build\gtk\x64\release\bin;" + $env:Path $env:LIB = "C:\gtk-build\gtk\x64\release\lib;" + $env:LIB $env:INCLUDE = "C:\gtk-build\gtk\x64\release\include;C:\gtk-build\gtk\x64\release\include\cairo;C:\gtk-build\gtk\x64\release\include\glib-2.0;C:\gtk-build\gtk\x64\release\include\gobject-introspection-1.0;C:\gtk-build\gtk\x64\release\lib\glib-2.0\include;" + $env:INCLUDE ``` -#### Use PyGObject - -Add the `--enable-gi` and `--py-wheel` options like: +Next, add the `--enable-gi` and `--py-wheel` options like: ```PowerShell gvsbuild build --enable-gi --py-wheel gtk4 pygobject diff --git a/doc/visual-studio-project-context-menu.png b/doc/visual-studio-project-context-menu.png new file mode 100644 index 0000000000000000000000000000000000000000..6430b358d4088f202240828a290f8306f3bcd15a GIT binary patch literal 11986 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 literal 0 HcmV?d00001 diff --git a/doc/visual-studio-properties-c-command-line.png b/doc/visual-studio-properties-c-command-line.png new file mode 100644 index 0000000000000000000000000000000000000000..90bd74b6a3d2d90afa4c4621857463f4a99afaf4 GIT binary patch literal 23762 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�s#oNnJ#K_3ZE4hKabRMuPhhA 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