2015-08-13 2 views
1

Прежде всего, я должен сказать, что я являюсь абсолютным новичком в C++ и всем компилятором, который происходит для разработки на родном языке.Precompile C++ vendor Libraries (#include api.h)

Что я на самом деле пытаюсь сделать, это создать привязку NodeJS, чтобы обернуть существующую библиотеку. Сама библиотека имеет api.h, которую я могу включить в мою обертку, и использовать ее для создания моих методов Wrapper. Проблема, которая у меня есть, это то, что сама библиотека является довольно большой:

src/ 
    vendor/ 
     libA/.. 
     libB/.. 
     libC/.. 
     api.h 
     api.cpp 
    addon.cpp (where I am including the "vendor/api.h") 

поэтому каждый раз, когда я компиляция моего addon.cpp всех библиотек должна быть повторно снова и снова, что отстой. Так что лучший способ скомпилировать api один раз и использовать его в моем addon.cpp (я не использую ни один из libs в моем аддоне только api.h!)

Кстати, я работаю над Ubuntu 14,04, и я использую CMake выполнить компиляцию:

чтобы компилировать мой аддон со всеми библиотеками, я определяю все SOURCE_FILES так:

file(GLOB SOURCE_FILES 
"src/addon.cpp" 
"src/vendor/*.cpp" "src/vendor/*.h" 
"src/vendor/libA/*.c" "src/vendor/libA/*.h" 
"src/vendor/libB/*.cpp" "src/vendor/libB/*.h" 
"src/vendor/libC/*.c" "src/vendor/libC/*.h" 
) 

... 
add_library(addon SHARED ${SOURCE_FILES}) 

чтобы скомпилировать его, я звоню

cmake-js rebuild 

CMake-JS, потому что он также загружает некоторые NodeJS необходимые вещи, но файл CMakeLists.txt использует обычный синтаксис Cmake

Таким образом, любая помощь будет действительно удивительным, спасибо!

+1

Возможно, вам придется объяснить, что такое УОПР. –

+0

Возможно, вы имели в виду 'файл (GLOB SOURCE_FILES ...'? – Nazar554

+0

Если вы просто modfiy 'addon.cpp', это должно ** не ** заставлять другие файлы перекомпилировать –

ответ

-1

На самом деле вы используете свой компилятор неправильно для nodejs. Поскольку вы находитесь на ранней стадии прототипирования, вы не должны использовать метод (мышления, попытки, компиляции, наблюдения, проверки, обратной связи, изменения, компиляции, ...)

Когда вы создаете прототипы, вы должны создать пустая DLL, которая будет во время выполнения Load/Free для внутреннего кода для функции. В окнах функция LoadLibrary/FreeLibrary.

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

После создания прототипа создайте поверх этой функции тестовую функцию, которая будет сохранять домен действительности и ожидаемый результат и переместить код в DLLloader.

Избегайте, чтобы Cmake - это ленивый способ скомпилировать, простой командной строки достаточно, чтобы скомпилировать вашу dll. Так или иначе, вы собираетесь использовать прототип, не используйте cmake. Откройте заметку и используйте команду command, чтобы сгенерировать ваш модуль.

Значит, вы не только используете простой блокнот или блокнот ++, но будете иметь максимальную скорость и едва ли не будете использовать отладчик вообще.

Так что больше не нужно перекомпилировать, способность прототипа точно в срок, исправление и тестирование в реальном времени.

+0

Мне не нужно проверять функциональность моего модуля, мне нужно проверить функции библиотеки в моем модуле. Но thx. На самом деле я могу использовать этот подход для прототипа связанных с узлом методов;) – webdeb

+0

Это то же самое, GetProcAdress ... спасибо за downvote в любом случае :( – danbo

+0

Хм, это был не я, но я хотел бы сфокусироваться, потому что я написал, что я на машине Linux, и вы рассказываете мне немного о Windows DLL bs ... Я также писал, что я использую строку cmd для компиляции, и вы говорите что-то о том, насколько здорово использовать командную строку за этот простой материал. Привет, чувак, вы получили голосу за из-за мусорного коэффициента вашего ответа, и я полностью согласен с ним. – webdeb