perl tcl Tclkit link 到具体安装
perl tcl Tclkit link to specific installation
如何在 macOS 上 link 将 tcl.pm 模块添加到 Tclkit,就像可用的 here 一样?
作为替代方案,我也很乐意 link Tcl.pm 到正常的 Tcl/Tk 安装。正如 Tcl.pod 中所述,这应该在编译模块时完成。他们写道:
perl Makefile.PL --library=-l/path/to/tcl(stub).a \
--include=-I/path/to/tcl/include \
--define="-DLIB_RUNTIME_DIR=... -DTCL_LIB_FILE=..."
因此,为了尝试一下,我使用了 macOS 上可用的预安装 Tcl/Tk 框架,将其移动到另一个目录,然后尝试 Makefile.pl 使用以下参数:
perl Makefile.PL \
--library="-L/xxx/Tcl.framework/Versions/8.5 -ltclstub8.5" \
--include=-I/xxx/Tcl.framework/Versions/8.5/Headers \
--define="-DUSE_TCL_STUBS -DTCLSH_PATH=\\"/usr/bin\\" -DLIB_RUNTIME_DIR=\\"/xxx/Tcl.framework\\" -DTCL_LIB_FILE=\\"Tcl\\""
然后我进行正常的make、make test 和make install。我没有收到任何可以指向解决方案的错误。我比较了 Makefile.pl 创建的不带参数的 make 文件和我的,发现除了路径(很明显)之外没有区别,而且我的 makefile 错过了这一行:
# dynamic_lib => { OTHERLDFLAGS=>q[-framework Carbon] }
无论我尝试什么,我的脚本都会以标准启动 Tcl/Tk...我不知道接下来可以尝试什么
Tcl 模块不需要您自行设置不同的细节(--library
、--include
、--define
),但您可以参考已安装的tclsh
或 tclConfig.sh
让它们自动加载。
见 --tclconfig
和 --tclsh
当 运行:
% perl Makefile.PL --help
这对我有用,既使用通过 MacPorts (sudo port install tcl
; 8.6.8) 获得的 Tcl 安装,也使用从 Tcl fossil checkout (core-8-6-branch
) 开始的安装。
% tar -xzf Tcl-1.27.tar.gz
% cd Tcl-1.27/
% perl Makefile.PL --tclconfig /opt/local/lib/tclConfig.sh
% make
% make test
这给了我:
$ make test
"/opt/local/bin/perl5.26" -MExtUtils::Command::MM -e 'cp_nonempty' -- Tcl.bs blib/arch/auto/Tcl/Tcl.bs 644
PERL_DL_NONLAZY=1 "/opt/local/bin/perl5.26" "-MExtUtils::Command::MM" "-MTest::Harness" "-e" "undef *Test::Harness::Switches; test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/call.t ............. ok
t/constants.t ........ ok
t/createcmd.t ........ ok
t/disposal-subs-a.t .. skipped: because: not installed use Devel::Refcount qw( refcount )
t/disposal-subs-b.t .. ok
t/disposal-subs-c.t .. ok
t/disposal-subs-d.t .. ok
t/disposal-subs-e.t .. ok
t/disposal-subs-f.t .. ok
t/disposal-subs.t .... 1/2 [[::perl::CODE(0x7fe3e3802a68) ::perl::Eval; ]]
t/disposal-subs.t .... ok
t/eval.t ............. ok
t/export_to_tcl.t .... ok
t/info.t ............. ok
t/memleak-a.t ........ skipped: because: not installed use Devel::Refcount qw( refcount )
t/result.t ........... ok
t/set-callback.t ..... ok
t/subclass.t ......... ok
t/trace.t ............ ok
t/unicode.t .......... ok
t/var.t .............. ok
All tests successful.
Test Summary Report
-------------------
t/info.t (Wstat: 0 Tests: 6 Failed: 0)
TODO passed: 2
Files=20, Tests=101, 15 wallclock secs ( 0.08 usr 0.03 sys + 0.99 cusr 0.32 csys = 1.42 CPU)
Result: PASS
如何在 macOS 上 link 将 tcl.pm 模块添加到 Tclkit,就像可用的 here 一样?
作为替代方案,我也很乐意 link Tcl.pm 到正常的 Tcl/Tk 安装。正如 Tcl.pod 中所述,这应该在编译模块时完成。他们写道:
perl Makefile.PL --library=-l/path/to/tcl(stub).a \
--include=-I/path/to/tcl/include \
--define="-DLIB_RUNTIME_DIR=... -DTCL_LIB_FILE=..."
因此,为了尝试一下,我使用了 macOS 上可用的预安装 Tcl/Tk 框架,将其移动到另一个目录,然后尝试 Makefile.pl 使用以下参数:
perl Makefile.PL \
--library="-L/xxx/Tcl.framework/Versions/8.5 -ltclstub8.5" \
--include=-I/xxx/Tcl.framework/Versions/8.5/Headers \
--define="-DUSE_TCL_STUBS -DTCLSH_PATH=\\"/usr/bin\\" -DLIB_RUNTIME_DIR=\\"/xxx/Tcl.framework\\" -DTCL_LIB_FILE=\\"Tcl\\""
然后我进行正常的make、make test 和make install。我没有收到任何可以指向解决方案的错误。我比较了 Makefile.pl 创建的不带参数的 make 文件和我的,发现除了路径(很明显)之外没有区别,而且我的 makefile 错过了这一行:
# dynamic_lib => { OTHERLDFLAGS=>q[-framework Carbon] }
无论我尝试什么,我的脚本都会以标准启动 Tcl/Tk...我不知道接下来可以尝试什么
Tcl 模块不需要您自行设置不同的细节(--library
、--include
、--define
),但您可以参考已安装的tclsh
或 tclConfig.sh
让它们自动加载。
见 --tclconfig
和 --tclsh
当 运行:
% perl Makefile.PL --help
这对我有用,既使用通过 MacPorts (sudo port install tcl
; 8.6.8) 获得的 Tcl 安装,也使用从 Tcl fossil checkout (core-8-6-branch
) 开始的安装。
% tar -xzf Tcl-1.27.tar.gz
% cd Tcl-1.27/
% perl Makefile.PL --tclconfig /opt/local/lib/tclConfig.sh
% make
% make test
这给了我:
$ make test
"/opt/local/bin/perl5.26" -MExtUtils::Command::MM -e 'cp_nonempty' -- Tcl.bs blib/arch/auto/Tcl/Tcl.bs 644
PERL_DL_NONLAZY=1 "/opt/local/bin/perl5.26" "-MExtUtils::Command::MM" "-MTest::Harness" "-e" "undef *Test::Harness::Switches; test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/call.t ............. ok
t/constants.t ........ ok
t/createcmd.t ........ ok
t/disposal-subs-a.t .. skipped: because: not installed use Devel::Refcount qw( refcount )
t/disposal-subs-b.t .. ok
t/disposal-subs-c.t .. ok
t/disposal-subs-d.t .. ok
t/disposal-subs-e.t .. ok
t/disposal-subs-f.t .. ok
t/disposal-subs.t .... 1/2 [[::perl::CODE(0x7fe3e3802a68) ::perl::Eval; ]]
t/disposal-subs.t .... ok
t/eval.t ............. ok
t/export_to_tcl.t .... ok
t/info.t ............. ok
t/memleak-a.t ........ skipped: because: not installed use Devel::Refcount qw( refcount )
t/result.t ........... ok
t/set-callback.t ..... ok
t/subclass.t ......... ok
t/trace.t ............ ok
t/unicode.t .......... ok
t/var.t .............. ok
All tests successful.
Test Summary Report
-------------------
t/info.t (Wstat: 0 Tests: 6 Failed: 0)
TODO passed: 2
Files=20, Tests=101, 15 wallclock secs ( 0.08 usr 0.03 sys + 0.99 cusr 0.32 csys = 1.42 CPU)
Result: PASS