2017-10-29 238 views
0

的CMakeLists.txt如何设置cmake,以便将txt文件作为资源添加到工作目录中?

cmake_minimum_required(VERSION 3.8) 
project(untitled) 

set(CMAKE_CXX_STANDARD 11) 

set(SOURCE_FILES main.cpp) 
add_executable(untitled ${SOURCE_FILES}) 

的main.cpp

#include <iostream> 
#include <fstream> 
#include <string> 
using namespace std; 

int main() { 
    string line; 
    ifstream myfile ("test.txt"); 
    if (myfile.is_open()) 
    { 
     while (getline (myfile,line)) 
     { 
      cout << line << '\n'; 
     } 
     myfile.close(); 
    } 

    else cout << "Unable to open file"; 

    return 0; 
} 

我得到这个输出 “无法打开文件”。 文件test.txt,CMakeLists.txtmain.cpp位于相同的目录中。 IDE是CLion。

如何设置CMakeLists.txt,以便将test.txt文件添加到工作目录中作为资源?

回答

0

您可以使用file(COPY成语:

file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/test.txt 
    DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) 

但可能我也建议configure_fileCOPYONLY选项。这样,当修改test.txt时,CMake将重新配置并重新生成构建。如果你不需要的是,仅仅用file(COPY

configure_file(${CMAKE_CURRENT_SOURCE_DIR}/test.txt 
    ${CMAKE_CURRENT_BINARY_DIR} COPYONLY) 

您还会看到使用add_custom_command复制文件很多人,但是这是比较有用的,当你必须构建步骤之间复制文件:

add_custom_command(
    TARGET untitled POST_BUILD 
    COMMAND ${CMAKE_COMMAND} -E copy 
      ${CMAKE_SOURCE_DIR}/test.txt 
      ${CMAKE_CURRENT_BINARY_DIR}/test.txt) 

我认为在你的情况下,第一个例子是最合适的,但现在你的工具箱中有适用于所有场景的工具。

+0

非常感谢。有没有办法,一次可以将多个文件复制到二进制目录中? – TrW236

+0

当然。使用'GLOB'关键字:'file(GLOB MY_FILES“* .txt”)file(COPY $ {MY_FILES} DESTINATION $ {CMAKE_CURRENT_BINARY_DIR})' –

相关问题