mkmf ignores files in sub-folders when it compiles the C extension

后端 未结 2 1563

I\'d like to organize the C source code like this:

+ /
|
|___ + ext
|    |
|    |___ + native_extension
|         |
|         |___ + lib
|         |    |
|           


        
相关标签:
2条回答
  • 2021-01-05 19:56

    You can use source files from another folders with "extconf.rb" like this:

    require 'mkmf'
    
    extension_name = 'native_extension'
    dir_config(extension_name)
    
    # enum all source files
    $srcs = ["native_extension.c", "lib/file.c"]
    
    # add include path to the internal folder
    # $(srcdir) is a root folder, where "extconf.rb" is stored
    $INCFLAGS << " -I$(srcdir)/lib"
    
    # add folder, where compiler can search source files
    $VPATH << "$(srcdir)/lib"
    
    create_makefile(extension_name)
    
    0 讨论(0)
  • 2021-01-05 20:10

    While you can pass a second argument to make_makefile to specify a different source directory (e.g., make_makfile('native_extension', 'lib')), that would cause it not to include your native_extension.c file. Looking at the source for mkmf.rb, it doesn't appear there's any way to make it look in both places short of rewriting the generated Makefile yourself.

    0 讨论(0)
提交回复
热议问题