2013-11-21 35 views
1

我在我的項目中的src目錄中有一個簡單的C源文件。我Build.PL包含以下行:我怎樣纔能有Module :: Build編譯並鏈接我的小C程序?

c_source => ['src'], 
extra_compiler_flags => ['-std=c99'] 

然而,這一切確實是把它編譯成一個.o文件中對應的C文件的src目錄。我真的很喜歡將它編譯並鏈接到一個可執行文件,然後放入我的bin目錄中。

這是可能的和建議Module::Build

+1

構建一個要與Perl鏈接的對象文件。它應該有自己的構建過程。你可以從M :: B啓動構建過程,我想,但我不知道如何。 – ikegami

回答

1

雖然ikegami說這不是正確的做事方式(我同意它可能不是...),但我最終只使用Module::Build對象上的cbuilder獲取器手動進行編譯。只有一個C文件,我認爲這是一個小小的罪過,這讓我繼續前進!

my $b = $builder->cbuilder(); 

my $obj_file = $b->compile(
    source => 'src/myfile.c', 
    extra_compiler_flags => ['-std=c99'], 
    include_dirs => ['/my/path/zeromq-3.2.4/include'] 
); 

my $lib_file = $b->link_executable(
    objects => $obj_file, 
    extra_linker_flags => [ 
     '-lpthread', 
     '-L/my/path/sw/zmq/lib/', 
     '-lzmq' 
    ], 
    exe_file => 'my_file' 
); 
+1

嘿,如果它有效,它的工作原理。 – ikegami