[Tutorial] SketchUp Ruby C Extension
-
Don't forget the "help" topic here:
[Info] C/C++ Ruby extensions & SketchUp plugins
.. and read Adan Nelson's posts (links on the above list.) -
from the info file "win32.readme" in the Ruby C source:
@unknownuser said:You can NOT use a path name [that] contains any white space characters as
the ruby source directory, this restriction comes from the behavior of include directives of NMAKE.
(- you may call it a bug. -) -
Thom:
#pragma comment(lib, "*.lib")
adds the libraries to the link phase (that hold imports and functions code)it was a way to make sure that it will compile even if you create a new project and don't use in mine in PellesC.
-
Right'o! Gotcha. Been reading more up on C and GCC.
-
Thanks Thomas for the example.
I do not understand what is 'extconf.rb' for. I have compiled my extension under VC++ 2008 without running the file and without using any makefile... Is it bad ?
-
extconf.rb - external configuration, it generates the makefile to create the extension. using makefile you can automate builds and tests.
-
extconf.rb
generates a make file you can use withmake
under OSX andnmake
under Windows.
http://ruby-doc.org/docs/ProgrammingRuby/html/ext_ruby.html#UG -
@unknownuser said:
I have compiled my extension under VC++ 2008
How big difference is making a Ruby Extension in C++ as oppose to C? ...seeing how Ruby is built in C...
-
@unknownuser said:
extconf.rb - external configuration, it generates the makefile to create the extension. using makefile you can automate builds and tests.
Got it! In VC++ I have to configure it on my own.
@thomthom said:
How big difference is making a Ruby Extension in C++ as oppose to C? ...seeing how Ruby is built in C...
You certainly would need to enclose declaration of the extension initialization with
extern "C"
:extern "C" { void Init_SX_HelloWorld(); }
I am not really an expert, but I guess all the rest would stay same.
-
Added a new example with basic functions. Will start on the tutorial text and images next.
Btw, does anyone know how one can make extconf.rb and make/nmake output their files to a given folder? I'd like to make it so that each platform outputs its generated files to separate directories.
-
What C++ compiler or development environment are you going to write this for so I can go download it and start poking around in it?
-
I am writing the extensions in C. But under windows I installed Visual C++ Express 2010 because it has the required Windows headers and
nmake
to compile it. I have some crude notes in the README.txt in the repo. Under OSX you need X Tools from the OSX DVD. -
Note that I never use the Visual C++ IDE editor.
-
Just wondering if there's any reason that MinGW instead of MSVC++ could not be used to compile c extensions. I assume the c extension is a libaray and doesn't require any Windows-specific GUI stuff - it's just a library of functions, right?
-
@thomthom said:
Btw, does anyone know how one can make extconf.rb and make/nmake output their files to a given folder? I'd like to make it so that each platform outputs its generated files to separate directories.
Did you check the methods defined in "mkmf.rb" ?
(You can also see "Appendix C. Functions Available in extconf.rb" in the "README.EXT" file.).. also check our the "extmk.rb" file in the ext dir.
-
@jim said:
Just wondering if there's any reason that MinGW instead of MSVC++ could not be used to compile c extensions. I assume the c extension is a libaray and doesn't require any Windows-specific GUI stuff - it's just a library of functions, right?
Dunno. I'd think it'd be possible. But I really have no clue when it comes to compiling. It'd be nice to have tutorials for different compilers. So please feel free to jump on the bandwagon )
-
@dan rathbun said:
Did you check the methods defined in "mkmf.rb" ?
(You can also see "Appendix C. Functions Available in extconf.rb" in the "README.EXT" file.).. also check our the "extmk.rb" file in the ext dir.
Yea, got a wee bit lost...
-
@thomthom said:
Yea, got a wee bit lost...
I know (insert head-spinning emoticon here).
Lets try these:
A Simple Makefile TutorialI think the constant you want is
DESTDIR
or$(DESTDIR)
-
Will have a look. Currently when I use nmake I get some warning about some of the compiler flags. Maybe I can eliminate them. I'd prefer that so there's less noise coming from the compiler. Easier to spot other warnings.
( That first link is sightly messed up though, as they didn't escape angle brackets inside the code examples:
#include <hellomake.h>
eaten by the browser - at least under Firefox.I've come across a partial documentation of mkmf: http://www.ensta-paristech.fr/~diam/ruby/online/ruby-doc-stdlib/libdoc/mkmf/rdoc/index.html
-
@thomthom said:
Dunno. I'd think it'd be possible. But I really have no clue when it comes to compiling. It'd be nice to have tutorials for different compilers. So please feel free to jump on the bandwagon )
I could not get MinGW working using Ruby 1.8.6. I could get the examples to compile using Ruby 1.9.3, but they just crashed SketchUp.
But both example seem to compile and work just fine in SketchUp using VC++ Express and Ruby 1.8.6 per your instructions in the Readme file.
Advertisement