2017-10-29 7 views
0

CMakeLists.txt 나는 "파일을 열 수 없습니다"이 출력을 가지고리소스로 작업 디렉토리에 txt 파일을 추가하기 위해 cmake를 설정하는 방법은 무엇입니까?

#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; 
} 

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. 파일 test.txt, CMakeLists.txtmain.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})' –