2016-12-29 48 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創建)它會自動通過在構建時創建的可執行文件的位置被替換。此外,還會添加目標級依賴項,以便在使用此自定義命令的任何目標之前構建可執行目標。