2014-10-31 46 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