如何在CMake中制作用Tcl编写的项目?

时间:2019-03-21 22:12:24

标签: cmake tcl

我正在使用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脚本。

提前感谢您的答复和帮助。

最佳, 达里恩

2 个答案:

答案 0 :(得分:0)

感谢您的回复。请查看下面的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

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

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

答案 1 :(得分:0)

您必须注意其他路径,例如,运行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中添加命令,目标或执行子流程的更多信息。