是scons不支持LDFLAGS吗?

Is it scons don't support LDFLAGS?

我是scons的新手。我正在尝试通过 scons 使用 gRPC 构建程序。 我使用 grpc_lib = commands.getoutput('pkg-config --libs protobuf grpc++') 来获取 LDFLAGS。 grpc_lib 是一个字符串

-L/home/zty/.local/lib -lprotobuf -lpthread -lgrpc++ -labsl_raw_hash_set -labsl_hashtablez_sampler -labsl_exponential_biased -labsl_hash -labsl_bad_variant_access -labsl_city -labsl_status -labsl_cord -labsl_bad_optional_access -labsl_str_format_internal -labsl_synchronization -labsl_graphcycles_internal -labsl_symbolize -labsl_demangle_internal -labsl_stacktrace -labsl_debugging_internal -labsl_malloc_internal -labsl_time -labsl_time_zone -labsl_civil_time -labsl_strings -labsl_strings_internal -labsl_throw_delegate -labsl_int128 -labsl_base -labsl_spinlock_wait -labsl_raw_logging_internal -labsl_log_severity -labsl_dynamic_annotations -lgrpc -laddress_sorting -lre2 -lupb -lcares -lz -labsl_raw_hash_set -labsl_hashtablez_sampler -labsl_exponential_biased -labsl_hash -labsl_bad_variant_access -labsl_city -labsl_status -labsl_cord -labsl_bad_optional_access -labsl_str_format_internal -labsl_synchronization -labsl_graphcycles_internal -labsl_symbolize -labsl_demangle_internal -labsl_stacktrace -labsl_debugging_internal -labsl_malloc_internal -labsl_time -labsl_time_zone -labsl_civil_time -labsl_strings -labsl_strings_internal -labsl_throw_delegate -labsl_int128 -labsl_base -labsl_spinlock_wait -labsl_raw_logging_internal -labsl_log_severity -labsl_dynamic_annotations -lgpr -labsl_str_format_internal -labsl_synchronization -labsl_graphcycles_internal -labsl_symbolize -labsl_demangle_internal -labsl_stacktrace -labsl_debugging_internal -labsl_malloc_internal -labsl_time -labsl_time_zone -labsl_civil_time -labsl_strings -labsl_strings_internal -labsl_throw_delegate -labsl_int128 -labsl_base -labsl_spinlock_wait -labsl_raw_logging_internal -labsl_log_severity -labsl_dynamic_annotations -lssl -lcrypto

所以我的 SConstruct 在下面,但它没有 link 使用 LDFLAGS。

import os
import commands
from SCons.Script import *
grpc_lib = commands.getoutput('pkg-config --libs protobuf grpc++')
grpc_cflags = commands.getoutput('pkg-config --cflags protobuf grpc')

mainEnv = Environment(ENV = os.environ)

mainEnv['CXX'] = 'g++'
mainEnv.Append(CXXFLAGS = '-std=c++11')
mainEnv.Append(CPPPATH = '../protos')
mainEnv.Append(CPPFLAGS = grpc_cflags)
mainEnv.Append(LDFLAGS = grpc_lib)

sources = Split("""
                ../protos/CSmalloc.grpc.pb.cc
                ../protos/CSmalloc.pb.cc
                server.cc
                """)
mainEnv.Program('server',sources)

输出

g++ -o /home/zty/lsnvmm-pmalloc/examples/grpc-CS/protos/CSmalloc.grpc.pb.o -c -std=c++11 -lpthread -I/home/zty/.local/include -I/home/zty/lsnvmm-pmalloc/examples/grpc-CS/protos /home/zty/lsnvmm-pmalloc/examples/grpc-CS/protos/CSmalloc.grpc.pb.cc
g++ -o /home/zty/lsnvmm-pmalloc/examples/grpc-CS/protos/CSmalloc.pb.o -c -std=c++11 -lpthread -I/home/zty/.local/include -I/home/zty/lsnvmm-pmalloc/examples/grpc-CS/protos /home/zty/lsnvmm-pmalloc/examples/grpc-CS/protos/CSmalloc.pb.cc
g++ -o server.o -c -std=c++11 -lpthread -I/home/zty/.local/include -I/home/zty/lsnvmm-pmalloc/examples/grpc-CS/protos server.cc
g++ -o server /home/zty/lsnvmm-pmalloc/examples/grpc-CS/protos/CSmalloc.grpc.pb.o /home/zty/lsnvmm-pmalloc/examples/grpc-CS/protos/CSmalloc.pb.o server.o

顺便问一下,有没有更简单的方法来使用 gRPC 构建 C++ 程序?

如果使用 mainEnv.ParseConfig 会更容易,它可以将 运行 pkg-config 上的结果直接拆分为正确的构造变量。

至于 gRPC... 互联网上至少有一些关于在 scons 中顺利使用 protobufs 的实验性工作。这是其中之一,不确定它是否是“最佳”版本:https://github.com/SCons/scons/wiki/ProtocBuilder。您可能需要更多...您可以加入 scons Discord 频道进一步聊天。已编辑:没有意识到页面指向的存储库是在 Bitbucket 删除 non-git 存储库时关闭的集合之一,但它已存档,没有丢失。