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

TrW*_*236 3 c++ cmake clion

CMakeLists.txt

cmake_minimum_required(VERSION 3.8)
project(untitled)

set(CMAKE_CXX_STANDARD 11)

set(SOURCE_FILES main.cpp)
add_executable(untitled ${SOURCE_FILES})
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)

我得到此输出“无法打开文件”。该文件test.txtCMakeLists.txtmain.cpp在同一个目录下。IDE是CLion。

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

Cin*_*its 5

您可以使用file(COPY成语:

file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/test.txt
     DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
Run Code Online (Sandbox Code Playgroud)

但是我也可以建议configure_file使用该COPYONLY选项。这样,test.txt修改后,CMake将重新配置并重新生成构建。如果您不需要,请使用file(COPY

configure_file(${CMAKE_CURRENT_SOURCE_DIR}/test.txt
    ${CMAKE_CURRENT_BINARY_DIR} COPYONLY)
Run Code Online (Sandbox Code Playgroud)

您还将看到许多人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)
Run Code Online (Sandbox Code Playgroud)

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

  • 绝对是 使用`GLOB`关键字:`file(GLOB MY_FILES“ * .txt”)file(COPY $ {MY_FILES} DESTINATION $ {CMAKE_CURRENT_BINARY_DIR})` (2认同)