J'ai un haut niveau définit.mk fichier qui répertorie certains répertoires et C bibliothèques à inclure en fonction du projet comme alors.ExtUtils :: MakeMaker y compris externe * .mk et en utilisant définit dans * fichier .mk pour les paramètres LIBS et INC dans WriteMakefile
KERNEL_LIB = -lkdev
DRIVER_LIB = -ldriver -lutil -linit $(KERNEL_LIB)
DRIVER_INCLUDE = -I../../include
J'utilise XS pour permettre aux scripts Perl d'accéder à ces bibliothèques et MakeMaker pour générer le Makefile qui reliera ces bibliothèques. Je veux faire de telle sorte que lorsque le Makefile est généré, il tire dans ces définit.
donné une WriteMakefile comme celui-ci
WriteMakefile(
NAME => 'generic_scripts',
VERSION_FROM => 'generic_scripts.pm',
LIBS => ['-L/usr/local/app/lib -lkdev -lpthread -lrt -ldriver -lutil -linit'],
DEFINE => '',
INC => '-I../../include',
clean => {FILES=>"*.o"},
);
Je veux atteindre cet
WriteMakefile(
NAME => 'generic_scripts',
VERSION_FROM => 'generic_scripts.pm',
LIBS => ['-L/usr/local/dx/lib $(KERNEL_LIB) -lpthread -lrt $(DRIVER_LIB)'],
DEFINE => '',
INC => '$(DRIVER_INCLUDE)',
clean => {FILES=>"*.o"},
);
De @mobrule J'ai maintenant ce Makefile.PL
use 5.008008;
use ExtUtils::MakeMaker;
use ExtUtils::MM_Unix;
use ExtUtils::MM;
sub MY::post_initialize {
open my $defs, '<', 'defines.mk';
my $extra_defines = join '', <$defs>;
close $defs;
return $extra_defines;
}
sub MM::init_others {
my $self = shift;
$self->ExtUtils::MM_Unix::init_others(@_);
$self->{EXTRALIBS} = '-L/usr/local/app/lib $(DRIVER_LIB) -lpthread -lrt';
$self->{BSLOADLIBS} = $self->{LDLOADLIBS} = $self->{EXTRALIBS};
}
WriteMakefile(
NAME => 'generic_scripts',
VERSION_FROM => 'generic_scripts.pm',
DEFINE => '',
INC => '$(DRIVER_INCLUDE)',
clean => {FILES=>"*.o"},
);
qui ressemble comme il le fait ce que je veux. Merci!
Avez-vous une question ici? Quelle partie avez-vous des problèmes avec? Qu'avez-vous essayé? – cjm
Eh bien, je suis juste curieux de savoir s'il y a un moyen de le faire? En regardant la documentation en ligne, cela ne semble pas évident car aucun des paramètres de WriteMakefile ne peut y parvenir. Je suppose que je peux tirer dans le fichier defines.mk dans Makefile.PL et l'analyser, mais est-il un moyen plus facile? – colekas