2016-12-29 49 views
0

我正在开发一个C++项目,并且我想在构建上执行一个脚本来生成一些文件。我对CMake不是很熟悉,所以我需要一些帮助。CMake:构建项目时执行C++文件

而脚本是指项目中的.cpp文件。

我已成功地获得如下:

set(PrecisionCommand 
     ${CMAKE_SOURCE_DIR}/src/main/matlab/matlabprecision.cpp 
    ) 
    set(precision_output_files 
     ${CMAKE_SOURCE_DIR}/work/variables.txt 
    ) 

    add_custom_command(
     OUTPUT ${precision_output_files} 
     COMMAND ${PrecisionCommand} 
     COMMENT "Running ${PrecisionCommand}" 
    ) 


    add_custom_target(allocate_generate DEPENDS ${precision_output_files}) 

什么现在发生的是matlabprecision.cpp文件在文本编辑器被打开,而不是执行。我该如何解决?

+1

你不能'执行'一个C++文件(不要称之为'脚本')。你必须编译它并执行生成的二进制文件。这闻起来像[XY问题](http://mywiki.wooledge.org/XyProblem),你真的想达到什么目的? – Biffen

+0

你会如何期待它被执行?需要首先编译.cpp文件,以便生成可执行文件。 – pSoLT

+0

我在想,它可能能够以某种方式在本地编译。这可能是一个XY问题。我在源代码中有一个巨大的结构,我想在每个构建中导出并保存为.txt文件(这是我想要在.cpp文件中执行的)。它可以让我有软件开发脚本的元数据。 –

回答

1

因为.c文件不是脚本而是源文件,所以不能直接执行它。但是,你可能首先把它编译成可执行:

add_executable(PrecisionCommand ${CMAKE_SOURCE_DIR}/src/main/matlab/matlabprecision.cpp) 

,然后运行该可执行文件:

add_custom_command(
    OUTPUT ${precision_output_files} 
    COMMAND PrecisionCommand 
    COMMENT "Running PrecisionCommand" 

注意,那COMMAND选项使用目标名称用于运行可执行文件。 CMake的理解,使用和:

  • 变换目标名称到路径可执行。
  • 在创建可执行文件和运行它之间添加适当的依赖项

从技术文档约add_custom_command

如果命令指定了一个可执行的目标(由ADD_EXECUTABLE创建)它会自动通过在构建时创建的可执行文件的位置被替换。此外,还会添加目标级依赖项,以便在使用此自定义命令的任何目标之前构建可执行目标。