python — Добавление пути включения к конфигурации Waf (C ++)

Как я могу добавить путь включения в wscript?

Я знаю, что могу объявить, какие файлы из каких папок я хочу включить в любой файл cpp, например:

def build(bld):
bld(features='c cxx cxxprogram',
includes='include',
source='main.cpp',
target='app',
use=['M','mylib'],
lib=['dl'])

но я не хочу устанавливать его для каждого файла. Я хочу добавить путь к «глобальным включениям», поэтому он будет включаться каждый раз, когда будет скомпилирован любой файл.

6

Решение

Я нашел ответ. Вы должны просто установить значение «INCLUDES» для списка путей, которые вы хотите.
Не забывай бегать waf configure снова 🙂

def configure(cfg):
cfg.env.append_value('INCLUDES', ['include'])
9

Другие решения

Я потратил некоторое время на разработку хорошего способа сделать это, используя опцию «use» в методах bld.program (). Работая с библиотеками boost в качестве примера, я придумал следующее. Я надеюсь, что это помогает!

'''
run waf with -v option and look at the command line arguments given
to the compiler for the three cases.

you may need to include the boost tool into waf to test this script.
'''
def options(opt):
opt.load('compiler_cxx boost')

def configure(cfg):
cfg.load('compiler_cxx boost')
cfg.check_boost()

cfg.env.DEFINES_BOOST = ['NDEBUG']

### the following line would be very convenient
###     cfg.env.USE_MYCONFIG = ['BOOST']
### but this works too:
def copy_config(cfg, name, new_name):
i = '_'+name
o = '_'+new_name
l = len(i)
d = {}
for key in cfg.env.keys():
if key[-l:] == i:
d[key.replace(i,o)] = cfg.env[key]
cfg.env.update(d)

copy_config(cfg, 'BOOST', 'MYCONFIG')

# now modify the new env/configuration
# this adds the appropriate "boost_" to the beginning
# of the library and the "-mt" to the end if needed
cfg.env.LIB_MYCONFIG = cfg.boost_get_libs('filesystem system')[-1]

def build(bld):

# basic boost (no libraries)
bld.program(target='test-boost2', source='test-boost.cpp',
use='BOOST')

# myconfig: boost with two libraries
bld.program(target='test-boost',  source='test-boost.cpp',
use='MYCONFIG')

# warning:
# notice the NDEBUG shows up twice in the compilation
# because MYCONFIG already includes everything in BOOST
bld.program(target='test-boost3', source='test-boost.cpp',
use='BOOST MYCONFIG')
2

Я понял это, и шаги следующие:

Добавлена ​​следующая проверка в функции настройки в файле wscript. Это говорит сценарию о необходимости проверки указанного файла библиотеки (в данном случае libmongoclient), и мы сохраняем результаты этой проверки в MONGOCLIENT.

conf.check_cfg(package='libmongoclient', args=['--cflags', '--libs'], uselib_store='MONGOCLIENT', mandatory=True)

После этого шага нам нужно добавить файл конфигурации пакета (.pc) в путь / usr / local / lib / pkgconfig. Это файл, в котором мы указываем пути к lib и заголовкам. Вставка содержимого этого файла ниже.

prefix=/usr/local
libdir=/usr/local/lib
includedir=/usr/local/include/mongo

Name: libmongoclient
Description: Mongodb C++ driver
Version: 0.2
Libs: -L${libdir} -lmongoclient
Cflags: -I${includedir}

Добавлена ​​зависимость в функцию сборки отдельной программы, которая зависит от вышеуказанной библиотеки (то есть MongoClient). Ниже приведен пример.

mobility = bld( target='bin/mobility', features='cxx cxxprogram', source='src/main.cpp', use='mob-objects MONGOCLIENT', )

После этого снова запустите configure и соберите свой код.

0
По вопросам рекламы [email protected]