c++ - 为什么 fltk-config 的输出会截断 gcc 的参数?

标签 c++ python c scons fltk

我正在尝试构建我下载的应用程序,它使用 SCONS“进行替换”和 Fast Light Tool Kit Gui。

检测fltk存在的SConstruct代码是:

guienv = Environment(CPPFLAGS = '')
guiconf = Configure(guienv)

if not guiconf.CheckLibWithHeader('lo', 'lo/lo.h','c'):
    print 'Did not find liblo for OSC, exiting!'
    Exit(1)

if not guiconf.CheckLibWithHeader('fltk', 'FL/Fl.H','c++'):
    print 'Did not find FLTK for the gui, exiting!'
    Exit(1)

不幸的是,在我的 (Gentoo Linux) 系统和许多其他系统(Linux 发行版)上,如果包管理器允许同时安装 FLTK-1 和 FLTK-2,这可能会很麻烦。

我试图修改 SConstruct 文件以使用 fltk-config --cflagsfltk-config --ldflags(或 fltk-config --像这样添加 libs 可能比 ldflags) 更好:

guienv.Append(CPPPATH = os.popen('fltk-config --cflags').read())
guienv.Append(LIBPATH = os.popen('fltk-config --ldflags').read())

但这会导致对 liblo 的测试失败!查看 config.log 显示它是如何失败的:

scons: Configure: Checking for C library lo...
gcc -o .sconf_temp/conftest_4.o -c "-I/usr/include/fltk-1.1 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_THREAD_SAFE -D_REENTRANT"
gcc: no input files
scons: Configure: no

这到底应该怎么做?

为了完成我的回答,我如何从 os.popen( 'command').read() 的结果中删除引号?

编辑 这里真正的问题是为什么附加 fltk-config 的输出会导致 gcc 不接收它应该编译的文件名参数?

最佳答案

有两种类似的方法可以做到这一点: 1)

conf = Configure(env)
status, _ = conf.TryAction("fltk-config --cflags")
if status:
  env.ParseConfig("fltk-config --cflags")
else:
  print "Failed fltk"

2)

  try:
    env.ParseConfig("fltk-config --cflags")
  except (OSError):
    print 'failed to run fltk-config you sure fltk is installed !?'
    sys.exit(1)

关于c++ - 为什么 fltk-config 的输出会截断 gcc 的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2945877/

相关文章:

javascript - electron项目中如何集成qt native window?

c++ - 如何获取缺少源代码的英特尔 Fortran 库的 64 位二进制文​​件?

python - 带有 MultiIndex 列的 Pandas to_sql 索引

python - 你如何通过将它与单独的列表进行比较来对 python 中的列表进行排序?

c - Socket发送二进制数据而不是文本数据

c++ - 类似于嵌套互斥体但更通用的东西?

c++ - 如何知道是否在没有提供源代码的情况下调用了该函数?

python 类名未定义 NameError

java - 需要澄清 BODMAS 规则

c - 了解 Unix dup2 系统调用?