2017-10-29 46 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})' –

相關問題