【问题标题】:How to make a project written with Tcl in CMake?如何在 CMake 中制作一个用 Tcl 编写的项目?
【发布时间】:2019-03-21 22:12:24
【问题描述】:

我正在使用 cmake 版本 3.14.0-rc3 来制作我的代码。当我在我的 CMakelist.txt 中以 C 或 C++ 编写的任何代码为目标时,它可以很好地工作并生成可执行文件。

cmake_minimum_required(VERSION 3.3)
PROJECT (HELLO)
ADD_EXECUTABLE(hello hello_world.cpp)

但是当我尝试使用 Tcl 脚本编写此代码时,它失败了,并且我收到以下致命错误:

Fatal error while making a tcl script with cmake

谁能帮我解决这个问题?看来 cmake 通常无法编译 Tcl 脚本。

提前感谢您的热心回复和帮助。

最好的, 达里昂

【问题讨论】:

  • “编译 Tcl 脚本”是什么意思?你到底想达到什么目的,你能显示正在执行的行吗?一般来说,Tcl 脚本并不意味着在由 CMake 管理的 C 或 C++ 项目的意义上“编译”。
  • 如果你试图构建一个使用 Tcl 库的 C/C++ 项目,它只是一个共享库(除非你正在构建一个 Tcl 扩展,当事情有点复杂时)......

标签: cmake tcl


【解决方案1】:

感谢您的回复。请查看下面的 CMakelist.txt 以及用 Tcl 编写的简单 puts 命令,用 cmake 生成并执行。

Cmakelist.txt

    CMAKE_MINIMUM_REQUIRED(VERSION 3.3)
    PROJECT (HELLO)
    ADD_LIBRARY(hello_world STATIC $hello_world.tcl.in)
    SET_TARGET_PROPERTIES(hello_world PROPERTIES LINKER_LANGUAGE TCL)
    ADD_EXECUTABLE(hello hello_world.tcl.in)

hellow_world.tcl.in

puts "This is a message written by Tcl scripts"

我发现 CMake 可以识别某些特定的文件扩展名。请看下图,报错信息: cmake only aaccepts certain file extensions

我创建了一个新文件夹,例如 build,在 linux 终端中我写了 cmake .. 但我收到了上面显示的错误消息。

我认为应该有一种方法可以使用 CMake 执行 Tcl 脚本。

【讨论】:

  • 好像你被XY problem 所困扰。请参阅我的暂定答案。
【解决方案2】:

您必须注意不同的路径,例如,将custom commands or adding custom targets 运行到您的 CMake 项目。恐怕您在 CMake 的上下文中混淆了库、可执行文件和外部命令的性质。

我认为应该有一种方法可以使用 CMake 执行 Tcl 脚本 嗯。

您可能想要尝试以下操作:在CMakeLists.txt 中,您定义一个自定义目标MyTarget,它调用TCLSH 可执行文件(如果有):

CMAKE_MINIMUM_REQUIRED(VERSION 3.3)
PROJECT (HELLO)

find_program (TCLSH tclsh)

if (TCLSH) 
add_custom_target(
  MyTarget ALL
  COMMAND TCLSH myScript.tcl
)
endif (TCLSH)

(1) find_programif/endif 将使自定义目标仅在找到名为 tclsh 的可执行文件的条件下可用。

(2) myScript.tcl 是您项目目录中的 Tcl 脚本。

(3) 运行cmake . && make 将有效调用:tclsh myScript.tcl,生成:

$cmake . && make
-- Configuring done
-- Generating done
-- Build files have been written to: /tmp/hello
This is a message written by Tcl scripts
Built target MyTarget

这只是为了让您入门,您必须阅读更多关于在 CMake 中添加命令、目标或执行子进程的信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    • 2017-04-28
    • 2013-08-03
    相关资源
    最近更新 更多