如何使用waf在自定义路径中搜索库/标题?

时间:2013-01-05 21:26:41

标签: c++ waf

我尝试在waf wscript文件中搜索库和标头。一般来说,这可能与:

def configure( conf ):
  conf.load( "compiler_cxx" )
  conf.check_cxx( lib = "thelib" )
  conf.check_cxx( header_name "header.hpp" )

在类似Unix的系统上运行良好,其中库和标头大多位于常见位置。但是,我想在check_cxx()命令中添加自定义搜索路径,特别是为Windows系统上的用户提供查找库的机会,这通常位于文件系统的某个位置。

我知道libpath这个论点,但是它仍然需要以某种方式填充,我想知道是否有一个我错过的更普遍甚至内置的解决方案。

我也很高兴听到有关此类事情的其他方法,解决方案或良好做法。

3 个答案:

答案 0 :(得分:4)

最佳做法是使用WAF的use工具进行检查(§10.3 of the wafbook)并定义外部/系统库的路径(§10.3.3

看起来像是:

def configure(conf):

    conf.load('compiler_cxx')
    conf.env.LIBPATH_MYLIB = ['/usr/local/lib']
    conf.env.INCLUDES_MYLIB  = ['/usr/local/include']

    if sys.platform == 'win32':
            conf.env.LIBPATH_MYLIB   = ['/custom/windows/path/lib']
            conf.env.INCLUDES_MYLIB  = ['/custom/windows/path/include']

    # use MYLIB in your check
    conf.check_cxx(lib = 'somelib', use = 'MYLIB', cxxflags = '-O2')

def build(bld):

    # Of course you can use the defined MYLIB in build ^^
    bld.program(source = 'main.cpp', use = 'MYLIB')

答案 1 :(得分:1)

def build(bld):
    bld.program(
        ...
        stdlibpath=['list/of','various/paths','the/linker/checks/for','libraries'],
        ...
    )

答案 2 :(得分:0)

Wafs C和C ++编译工具也尊重Windows上的环境变量。因此,您只需在运行Waf之前设置CXXFLAGSLDFLAGS

> set CXXFLAGS=/IC:\\path\\to\\header.hpp-file
> set LDFLAGS=/LIBPATH:C:\\path\\thelib
> python waf configure build
...

/I/LIBPATH是Waf将传递给C编译器和链接器的开关。在这种情况下,使用Microsoft VisualC。如果您使用的是gcc或clang,请改用-I-L