2017-10-29 14 views
0

CMakeLists.txttxtファイルをリソースとして作業ディレクトリに追加するには、cmakeを設定するには?

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.txtおよびmain.cppは同じディレクトリにあります。 IDEはCLionです。

ファイルをリソースとして追加するには、CMakeLists.txtを設定するにはどうすればよいですか?

答えて

0

あなたはfile(COPYイディオムを使用することができます

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

をしかし、私はまたCOPYONLYオプションでconfigure_fileを提案することができます。このようにしてtest.txtが変更されると、CMakeはビルドを再設定して再生成します。あなたがそれを必要としない場合は、ちょうどあなたがまた、ファイルをコピーするadd_custom_commandを使用して多くの人々を見ることができますfile(COPY

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

を使用していますが、ビルドステップの間でファイルをコピーする必要がありますときには、より有用である:

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")ファイル(COPY $ {MY_FILES} DESTINATION $ {CMAKE_CURRENT_BINARY_DIR}) ' –

関連する問題