我的一个项目是由 gn+ninja 构建的。我想使用平面缓冲区https://github.com/dvidelabs/flatcc,但它是用 cmake 编写的。
因为我的项目应该建立在旧的 red hat 6 上,所以没有合适的 cmake 版本来构建 flatcc。将它作为我项目子目录的一部分导入并使用 gn 构建的更好方法是什么?
我的一个项目是由 gn+ninja 构建的。我想使用平面缓冲区https://github.com/dvidelabs/flatcc,但它是用 cmake 编写的。
因为我的项目应该建立在旧的 red hat 6 上,所以没有合适的 cmake 版本来构建 flatcc。将它作为我项目子目录的一部分导入并使用 gn 构建的更好方法是什么?
在这里查看我的答案:https ://stackoverflow.com/a/63326374/12529885
如果有.so二进制文件,使用上面的脚本,否则只能使用static_library
或shared_library
作为源代码目标导入。
例如
# RocksDB
#--------------------------
import("//gn_build/platform_support.gni") ## variable SSE42 here.
config("rocksdb_export") {
include_dirs = ["rocksdb/include"]
visibility = [":rocksdb"]
}
config("rocksdb_build") {
defines = [
"ROCKSDB_SUPPORT_THREAD_LOCAL", # HAVE_THREAD_LOCAL
# "NUMA", # build with NUMA policy support(numactl-devel)
"TBB", # build with Threading Building Blocks (TBB)
"ROCKSDB_USE_RTTI",
"ZSTD",
"GFLAGS=1"
]
if (is_win) {
defines += ["ROCKSDB_WINDOWS_UTF8_FILENAMES", "WIN32", "OS_WIN", "_MBCS", "WIN64", "NOMINMAX"]
# defines += ["ROCKSDB_DLL", "ROCKSDB_LIBRARY_EXPORTS"]
libs = ["shlwapi.lib", "rpcrt4.lib"]
cflags_cc = ["/wd4127", "/wd4800", "/wd4996",
"/wd4351", "/wd4100", "/wd4204", "/wd4324"]
}else {
defines += ["ROCKSDB_PLATFORM_POSIX", "ROCKSDB_LIB_IO_POSIX"]
}
if (is_linux) {
defines += [
"OS_LINUX",
"ROCKSDB_PTHREAD_ADAPTIVE_MUTEX",
"ROCKSDB_SCHED_GETCPU_PRESENT",
"ROCKSDB_AUXV_GETAUXVAL_PRESENT",
"ROCKSDB_RANGESYNC_PRESENT",
]
if (!is_llvm) {
cflags_cc = ["-fno-builtin-memcmp"]
}
}
if (SSE42) {
defines += ["HAVE_SSE42", "HAVE_PCLMUL"]
}
include_dirs = ["rocksdb"]
}
static_library("rocksdb") {
configs += [":rocksdb_build"]
slist = read_file("rocksdb-master.gn_helper", "scope")
base = "rocksdb"
include_dirs = ["$base"]
sources = slist.SOURCES
base_pth = rebase_path("$base")
if (is_win) {
sources += slist.PORTWIN32
}
if (is_linux) {
sources += slist.PORTLINUX
}
#Enable folly mutex
include_dirs += ["$base/third-party/folly"]
sources += slist.FOLLY_DISTRIBUTED_MUTEX
#End folly mutex
deps = [":zstd_static", ":gflags"]
public_deps = [":tbb"]
public_configs = [":rocksdb_export"]
}
文件rocksdb-master.gn_helper
SOURCES = [
"rocksdb/cache/cache.cc",
"rocksdb/cache/clock_cache.cc",
...
]
PORTWIN32 = [
"rocksdb/port/win/io_win.cc",
"rocksdb/port/win/env_win.cc",
...
]
...