我正在使用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脚本。
提前感谢您的答复和帮助。
最佳, 达里恩
答案 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_program
和if/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中添加命令,目标或执行子流程的更多信息。