如何设置cmake,以便将txt文件作为资源添加到工作目录中?
问题描述:
的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.txt
和main.cpp
位于相同的目录中。 IDE是CLion。
如何设置CMakeLists.txt
,以便将test.txt
文件添加到工作目录中作为资源?
答
您可以使用file(COPY
成语:
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/test.txt
DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
但可能我也建议configure_file
与COPYONLY
选项。这样,当修改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)
我认为在你的情况下,第一个例子是最合适的,但现在你的工具箱中有适用于所有场景的工具。
非常感谢。有没有办法,一次可以将多个文件复制到二进制目录中? – TrW236
当然。使用'GLOB'关键字:'file(GLOB MY_FILES“* .txt”)file(COPY $ {MY_FILES} DESTINATION $ {CMAKE_CURRENT_BINARY_DIR})' –