Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/doc/gcc.xml')
-rw-r--r--winsup/doc/gcc.xml160
1 files changed, 160 insertions, 0 deletions
diff --git a/winsup/doc/gcc.xml b/winsup/doc/gcc.xml
new file mode 100644
index 000000000..b9039db96
--- /dev/null
+++ b/winsup/doc/gcc.xml
@@ -0,0 +1,160 @@
+<?xml version="1.0" encoding='UTF-8'?>
+<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+
+<sect1 id="gcc"><title>Using GCC with Cygwin</title>
+
+<sect2 id="gcc-cons"><title>Console Mode Applications</title>
+
+<para>Use gcc to compile, just like under UNIX.
+Refer to the GCC User's Guide for information on standard usage and
+options. Here's a simple example:</para>
+
+<example id="gcc-hello-world">
+<title>Building Hello World with GCC</title>
+<screen>
+<prompt>bash$</prompt> <userinput>gcc hello.c -o hello.exe</userinput>
+<prompt>bash$</prompt> <userinput>hello.exe</userinput>
+Hello, World
+
+<prompt>bash$</prompt>
+</screen>
+</example>
+
+</sect2>
+
+<sect2 id="gcc-gui"><title>GUI Mode Applications</title>
+
+<para>Cygwin allows you to build programs with full access to the
+standard Windows 32-bit API, including the GUI functions as defined in
+any Microsoft or off-the-shelf publication. However, the process of
+building those applications is slightly different, as you'll be using
+the GNU tools instead of the Microsoft tools.</para>
+
+<para>For the most part, your sources won't need to change at all.
+However, you should remove all __export attributes from functions
+and replace them like this:</para>
+
+<screen>
+int foo (int) __attribute__ ((__dllexport__));
+
+int
+foo (int i)
+</screen>
+
+<para>The Makefile is similar to any other UNIX-like Makefile,
+and like any other Cygwin makefile. The only difference is that you use
+<command>gcc -mwindows</command> to link your program into a GUI
+application instead of a command-line application. Here's an example:</para>
+
+<screen>
+<![CDATA[
+myapp.exe : myapp.o myapp.res
+ gcc -mwindows myapp.o myapp.res -o $@
+
+myapp.res : myapp.rc resource.h
+ windres $< -O coff -o $@
+]]>
+</screen>
+
+<para>Note the use of <filename>windres</filename> to compile the
+Windows resources into a COFF-format <filename>.res</filename> file.
+That will include all the bitmaps, icons, and other resources you
+need, into one handy object file. Normally, if you omitted the "-O
+coff" it would create a Windows <filename>.res</filename> format file,
+but we can only link COFF objects. So, we tell
+<filename>windres</filename> to produce a COFF object, but for
+compatibility with the many examples that assume your linker can
+handle Windows resource files directly, we maintain the
+<filename>.res</filename> naming convention. For more information on
+<filename>windres</filename>, consult the Binutils manual. </para>
+
+<para>
+The following is a simple GUI-mode "Hello, World!" program to help
+get you started:
+<screen>
+/*-------------------------------------------------*/
+/* hellogui.c - gui hello world */
+/* build: gcc -mwindows hellogui.c -o hellogui.exe */
+/*-------------------------------------------------*/
+#include &lt;windows.h&gt;
+
+char glpszText[1024];
+
+LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
+
+int APIENTRY WinMain(HINSTANCE hInstance,
+ HINSTANCE hPrevInstance,
+ LPSTR lpCmdLine,
+ int nCmdShow)
+{
+ sprintf(glpszText,
+ "Hello World\nGetCommandLine(): [%s]\n"
+ "WinMain lpCmdLine: [%s]\n",
+ lpCmdLine, GetCommandLine() );
+
+ WNDCLASSEX wcex;
+
+ wcex.cbSize = sizeof(wcex);
+ wcex.style = CS_HREDRAW | CS_VREDRAW;
+ wcex.lpfnWndProc = WndProc;
+ wcex.cbClsExtra = 0;
+ wcex.cbWndExtra = 0;
+ wcex.hInstance = hInstance;
+ wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION);
+ wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
+ wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
+ wcex.lpszMenuName = NULL;
+ wcex.lpszClassName = "HELLO";
+ wcex.hIconSm = NULL;
+
+ if (!RegisterClassEx(&amp;wcex))
+ return FALSE;
+
+ HWND hWnd;
+ hWnd = CreateWindow("HELLO", "Hello", WS_OVERLAPPEDWINDOW,
+ CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
+
+ if (!hWnd)
+ return FALSE;
+
+ ShowWindow(hWnd, nCmdShow);
+ UpdateWindow(hWnd);
+
+ MSG msg;
+ while (GetMessage(&amp;msg, NULL, 0, 0))
+ {
+ TranslateMessage(&amp;msg);
+ DispatchMessage(&amp;msg);
+ }
+
+ return msg.wParam;
+}
+
+LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
+{
+ PAINTSTRUCT ps;
+ HDC hdc;
+
+ switch (message)
+ {
+ case WM_PAINT:
+ hdc = BeginPaint(hWnd, &amp;ps);
+ RECT rt;
+ GetClientRect(hWnd, &amp;rt);
+ DrawText(hdc, glpszText, strlen(glpszText), &amp;rt, DT_TOP | DT_LEFT);
+ EndPaint(hWnd, &amp;ps);
+ break;
+ case WM_DESTROY:
+ PostQuitMessage(0);
+ break;
+ default:
+ return DefWindowProc(hWnd, message, wParam, lParam);
+ }
+ return 0;
+}
+</screen>
+</para>
+
+</sect2>
+</sect1>