mkmf ignore les fichiers des sous-dossiers quand il comstack l’extension C

Je voudrais organiser le code source C comme suit:

+ / | |___ + ext | | | |___ + native_extension | | | |___ + lib | | | | | |___ (Source files are kept in here - may contain sub-folders) | | | |___ native_extension.c | |___ native_extension.h | |___ extconf.rb | |___ + lib | | | |___ (Ruby source code) | |___ Rakefile 

Je ne parviens pas à faire en sorte que cette configuration fonctionne correctement avec mkmf . Les fichiers de native_extension/lib , inclus dans native_extension.c , sont complètement ignorés.

Lorsque je construis l’extension, seules native_extension.{h,c} sont compilées et je reçois une native_extension.{so,dll} incomplète native_extension.{so,dll} qui me donne des erreurs de recherche de symbole lorsque j’essaie de l’exécuter.

Un moyen de faire ce travail?

    Bien que vous puissiez passer un second argument à make_makefile pour spécifier un répertoire source différent (par exemple, make_makfile('native_extension', 'lib') ), vous ne le feriez pas pour inclure votre fichier native_extension.c . En regardant la source de mkmf.rb, il semble qu’il n’ya aucun moyen de donner l’impression dans les deux endroits à moins de réécrire vous-même le Makefile généré.

    Vous pouvez utiliser les fichiers source d’un autre dossier avec “extconf.rb” comme ceci:

     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)