asp.net新建网站,建设一个电商网站的流程图,温州品牌推广,wordpress支付宝支付简述 C/C开源库一般是一堆的头文件和源文件#xff0c;做到声明和实现分离#xff0c;减小单个模块大小#xff0c;这在设计上是很好的#xff0c;但是用起来稍显麻烦。在网上看到有好心人推荐了一个开源工具Amalgamate#xff0c;专门用来对C/C的头文件和源文件进行合并用… 简述 C/C开源库一般是一堆的头文件和源文件做到声明和实现分离减小单个模块大小这在设计上是很好的但是用起来稍显麻烦。在网上看到有好心人推荐了一个开源工具Amalgamate专门用来对C/C的头文件和源文件进行合并用的于是尝试了一下。 编译过sqlite源码的应该知道sqlite3源码包有一个是指包含sqlite3.h、sqlite3_ext.h、sqlite.c等为数不多几个代码文件的也有分开的嵌入到项目中非常方便。这就是用Amalgamate进行合并的。 下载并编译Amalgamate 下载很简单这里就不细述了 git clone https://github.com/vinniefalco/Amalgamate.git 编译也很简单直接使用VS打开Amalgamate\Builds\VisualStudio2010\Amalgamate.vcxproj然后编译生成即可。 最后的示例下载中有我编译的程序。 # gcc 编译
g Amalgamate.cpp juce_core_amalgam.cpp -o Amalgamate -lpthread -ldl
# clang编译
clang Amalgamate.cpp juce_core_amalgam.cpp -o Amalgamate -lpthread -ldl 具体的使用可以参考程序的帮助信息。 将libuv合并为单一头文件和源文件版本(Windows下) 用于合并的模板文件编写可以参考https://github.com/vinniefalco/Amalgams.git中的几个。 以libuv为例进行简单的说明。 先下载libuv的源码目录结构如下 首先先合并头文件 先编写一个头文件uv_all.h里面把libuv-v1.9.1\include下的文件都include进来。 源码如下 #include android-ifaddrs.h
#include pthread-barrier.h
#include stdint-msvc2008.h
#include tree.h
#include uv.h
#include uv_all.h
#include uv-errno.h
#include uv-threadpool.h
#include uv-version.h
#include uv-win.h 一个简单的做法就是cygwin或msys下使用命令ls *.h |xargs -I{} echo #include {}直接输出。 因为我这里只做windows平台的所以把多余的都给删除了。 实际上因为uv.h已经把需要的都包含上了所以这里直接使用uv.h也就够了。 运行下面命令生成合并后的头文件 Amalgamate.exe -i C:\Users\o\Documents\code\libuv-v1.9.1\include -w *.h;*.c C:\Users\o\Documents\code\libuv-v1.9.1\include\uv.h uv.h 执行完上面命令后会在当前目录生成一个新的uv.h文件也就是合并后的文件。上面参数中-i后面的是附加包含目录也就是和gcc中使用的-I是一样的。最后的uv.h是输出文件名前面的是输入的配置模板文件。 合并源码文件 合并源码文件的做法和合并头文件的做法是一致的先写一个配置文件uv_win_all.h把src和src/win目录下所有文件都包含进来内容如下 #include win/atomicops-inl.h
#include win/handle-inl.h
#include win/internal.h
#include win/req-inl.h
#include win/stream-inl.h
#include win/winapi.h
#include win/winsock.h#include heap-inl.h
#include queue.h
#include uv-common.h#include win/async.c
#include win/core.c
#include win/dl.c
#include win/error.c
#include win/fs.c
#include win/fs-event.c
#include win/getaddrinfo.c
#include win/getnameinfo.c
#include win/handle.c
#include win/loop-watcher.c
#include win/pipe.c
#include win/poll.c
#include win/process.c
#include win/process-stdio.c
#include win/req.c
#include win/signal.c
#include win/snprintf.c
#include win/stream.c
#include win/tcp.c
#include win/thread.c
#include win/timer.c
#include win/tty.c
#include win/udp.c
#include win/util.c
#include win/winapi.c
#include win/winsock.c#include fs-poll.c
#include inet.c
#include threadpool.c
#include uv-common.c
#include version.c 然后执行下面命令进行合并 Amalgamate.exe -i C:\Users\o\Documents\code\libuv-v1.9.1\include -i C:\Users\o\Documents\code\libuv-v1.9.1\src -w *.h;*.c C:\Users\o\Documents\code\libuv-v1.9.1\src\uv_win_all.c uv_win.c 合并后的文件中会遇到一些问题需要手动修改一下。比如多出遇到uv_zero_重定义的问题这个需要把第一次定义之后出现的都全部注释掉。 还有会遇到error LNK2019: 无法解析的外部符号 _InterlockedOr该符号在函数 _uv_tty_line_read_thread4 中被引用的问题这个只需要使用VS2012之后的版本编译就没问题了。 合并后的源码及项目文件 这里不多说直接放出下载链接 https://files.cnblogs.com/files/oloroso/libuv_webtest.7z 测试的代码部分来自于https://github.com/liigo/tinyweb.git Amalgamate参数简单说明 参数解释-s处理#include xxx的行即处理包含在系统目录中的头文件通常我们只需要处理双引号括起来的-w{wildcards}指定要处理的文件类型(后缀名)如果不是列表中指定的那么即便使用#include包含也不会处理默认设置是.cpp;.c;.h;.mm;*.m-f {file|macro}在inlcude出现的所有行中强制重新指定文件或宏-p {file|macro}避免在#include行中的后续出现中重新包含指定的文件或宏-d {name}{file}如果宏{name}出现在include包含行中使用{file}替代-i {dir}在处理include包含时可以在指定的{dir}目录中搜索文件-v输出详细信息转载于:https://www.cnblogs.com/oloroso/p/9121728.html