预编译C ++供应商库(#include api.h)

时间:2015-08-13 12:32:14

标签: c++ cmake precompiled-headers

首先,我必须说,我是c ++中的绝对初学者以及正在进行原生开发的所有编译器。

我实际上要做的是创建一个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 :(得分:-1)

实际上你正在以错误的方式使用你的编译器来获取nodejs。当你处于原型设计的早期阶段时,你不应该使用(思考,尝试,编译,观察,验证,反馈,修改,编译......)的方法。

当你进行原型设计时,你应该创建一个空的DLL,它将在运行时加载/释放functionnaly的内部代码。在Windows上,该函数是LoadLibrary / FreeLibrary。

这样做,将允许您使用迭代方法来修复您的问题,即脚本功能。

完成原型设计后,在该函数之上创建测试函数,该函数将持久保存有效域和结果,并将代码移动到DLLloader中。

避免Cmake是一种懒惰的编译方式,一个简单的命令行应该编译你的dll。既然你要打造原型,不要使用cmake。打开记事本并使用命令行生成模块。

因此,您不仅会使用简单的记事本或记事本++,而且您将获得最大的速度,并且根本不需要调试器。

所以不需要再重新编译,及时的原型能力,实时修复和测试。