分享

Clang and Objective

 oskycar 2013-09-15
Clang and Objective-C on Windows
Posted on March 21, 2012 by Sol

UPDATE 13 May 2013

For your convenience, I’ve uploaded on github a binary version of Clang and GNUstep. My recommendation is to compile it yourself as described in the article. If you need a quick way to use Clang and GNUSstep, you can use the linked binary: https://github.com/sol-prog/Clang_GNUstep_Objective-C_for_Windows

If you want to start learning Objective-C on a Windows computer, you’ve come to the right place. This tutorial will show you how to install a compiler and the necessary frameworks to start hacking Objective-C on Windows today. Be warned that I’m not talking about developing the next Objective-C iPhone/iPad application on Windows, this is not possible at the time of this writing!

A prerequisite for a successful install is the Python interpreter. Go to http://www./ and install Python 2.7.4 on your machine. After that you will need to update your path to include C:\Python27.

We’ll start with installing GNUstep, which aims to be “a free and open version of the Cocoa (formerly known as NeXTSTEP/OpenStep) APIs and tools”. In the next step, we will install Clang and I will show you how to write and compile a small Objective-C program.

Navigate to http://www./experience/Windows.html, download and install in this order: GNUstep MSYS System, GNUstep Core, GNUSstep Devel. From now on I will assume that you’ve installed GNUstep in C:\GNUstep. If you’ve installed GNUstep on a different location, please replace every occurrence of C:\GNUstep in the next steps accordingly.

GNUstep comes with the GCC compiler which, in principle, can be used to compile Objective-C programs. However in the last years Apple has added some important extensions to Objective-C, that are not available with gcc. Apple’s default compiler is Clang which is able to compile any modern Objective-C code. Since Clang doesn’t have an official Windows installer at the time of this writing we are going to compile it from sources.

Open a GNUstep shell window, you can find this in Start-GNUstep-Shell and write/paste the next lines one by one:

1
2
3
svn co http:///svn/llvm-project/llvm/trunk llvm
cd llvm/tools
svn co http:///svn/llvm-project/cfe/trunk clang

Now, we need to edit some hard coded paths from clang. Without this, clang won’t be able to find your header files. Navigate to your HOME folder, which on my machine is on C:\GNUstep\msys\1.0\home\sol, in your case this should something like C:\GNUstep\msys\1.0\home\your_name. Enter in llvm-tools-clang-lib-Frontend and open in your favorite text editor (I recommend Notepad++ or SublimeText 2) InitHeaderSearch.cpp. Search for the line that starts with “FIXME: temporary hack: hard-coded paths.” at about line 215 and add these lines:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
        ...
        // FIXME: temporary hack: hard-coded paths.
        AddPath("C:\\GNUstep\\include", System, false);
        AddPath("C:\\GNUstep\\msys\\1.0\include", System, false);
        AddPath("C:\\GNUstep\\msys\\1.0\include-fixed", System, false);
        AddPath("C:\\GNUstep\\lib\\gcc\\mingw32\\4.6.1\\include", System, false);
        AddPath("C:\\GNUstep\\lib\\gcc\\mingw32\\4.6.1\\include\\c++", System, false);
        AddPath("C:\\GNUstep\\lib\\gcc\\mingw32\\4.6.1\\include\\c++\\mingw32", System, false);
        AddPath("C:\\GNUstep\\lib\\gcc\\mingw32\\4.6.1\\include\\c++\\backward", System, false);
        AddPath("C:\\GNUstep\\GNUstep\\System\\Library\\Headers", System,false);
        //AddPath("/usr/local/include", System, true, false, false);
        break;
        ....

Don’t forget to comment line 11 in the above. Save and close the file. Next, we will create a build directory and we will configure the code for compilation:

1
2
cd ~/llvm && mkdir build && cd build
../configure --enable-optimized --enable-targets=host-only

Now, we are ready to compile Clang, this will take some time:

1
make && make install

Please note that in the above I’ve explicitly chose to compile the code on a single processor, keep the make line this way. At the end of this process you will see an error because make can’t build the documentation without gtroff. You can safely ignore this error, Clang will be properly installed.

Let’s check if clang works:

1
clang --version

You should see something like:

1
2
3
clang version 3.4 (trunk 181679)
Target: i686-pc-mingw32
Thread model: posix

Let’s try to compile a small Objective-C code in order to test our new compiler and libraries. Please note that this example won’t work with GCC and GNUstep, it will, however compile with Clang and GNUstep.

Create a new folder in your GNUstep HOME and in this folder two files: GNUmakefile and test.m:

1
2
3
cd ~
mkdir first_objc && cd first_objc
touch GNUmakefile test.m

Open test.m in your text editor, copy and save the next Objective-C code:

1
2
3
4
5
6
7
8
#include <Foundation/Foundation.h>

int main(){
    @autoreleasepool{
        NSLog( @"Objective-C has ARC now :D");
    }
    return 0;
}

Copy and save the next code in GNUmakefile:

1
2
3
4
5
6
include $(GNUSTEP_MAKEFILES)/common.make

TOOL_NAME = test
test_OBJC_FILES = test.m

include $(GNUSTEP_MAKEFILES)/tool.make

Now, you are ready to compile your first Objective-C program on Windows:

1
make CC=clang

In the above I’ve specifically instructed make to use Clang as the default compiler.

You can run your executable with:

1
./obj/test

If you want to learn more about Objective-C I could recommend you two books: Programming in Objective-C by Stephen G. Kochan and Objective-C Programming by Aaron Hillegass.

blog comments powered by Disqus

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多