2014-10-31 47 views
0

我正在用C++編寫一段代碼。程序應該從CSV文件讀取數據,然後進行一些處理,然後將其寫入另一個CSV輸出文件。我的程序讀取文件中的正確當我編譯:使用CPP從CSV文件中讀取,用CMake文件編譯代碼

make version1.cc 

然而,當我試圖用我的CMakeLists.txt編譯它,它甚至沒有去尋找文件。我想這thusfar,沒有成功:

add_custom_command(
    OUTPUT Output.csv 
    COMMAND version1 ${CMAKE_CURRENT_SOURCE_DIR}/Input.csv ${CMAKE_CURRENT_BINARY_DIR}/Output.csv 
    DEPENDS version1 ${CMAKE_CURRENT_SOURCE_DIR}/Input.csv 
    ) 

add_executable(version1 version1.cc Output.csv) 

我也曾嘗試以下,仍然沒有運氣:

INCLUDE_DIRECTORIES(
    ${CMAKE_CURRENT_SOURCE_DIR} 
    ${CMAKE_CURRENT_BINARY_DIR} 
) 
SET(MY_CSV_PATH "${CMAKE_CURRENT_SOURCE_DIR}/House1-July-Complete.csv") 
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/version1.cc ${CMAKE_CURRENT_BINARY_DIR}/version1.cc @ONLY) 
+0

我從你的CMakeLists.txt中看到:你的目標'version1'取決於'Output.csv',它本身取決於'version1'。聽起來像循環依賴於我。也許你應該使用add_custom_command(TARGET t target POST_BUILD ...)見http://www.cmake.org/cmake/help/v3.0/command/add_custom_command.html – 2014-10-31 09:41:47

+0

只是一個想法,像這樣的程序可能如果你在運行時設置路徑(通過命令行參數等),比編譯時使用cmake更有用。如果你想有一天移動文件怎麼辦? – 2014-11-01 12:10:59

回答

1

長話短說:

add_executable(version1 version1.cc) 

set(input_csv ${CMAKE_CURRENT_SOURCE_DIR}/Input.csv) 
set(output_csv ${CMAKE_CURRENT_BINARY_DIR}/Output.csv) 

add_custom_command(
    OUTPUT ${output_csv} 
    COMMAND version1 ${input_csv} ${output_csv} 
    DEPENDS version1 ${input_csv} 
) 

add_custom_target(process_csv 
    ALL # means that this custom target is also included in the ALL target 
    DEPENDS ${output_csv} 
) 

調用makemake all ,或make process_csv應該工作。

+0

這一個爲我工作。我還必須添加inputFile.open,因爲它在我嘗試解決這個問題的許多方法中丟失了:) – Valkyrie 2014-11-02 09:46:15