我有个文件叫
adhoc.cpp.proto
${SRC_DIR}
. 我需要把它复制到一个名为
adhoc.cpp
在里面
为其他任务做准备。如果文件不存在,我更喜欢创建它,但是我会无条件地复制它以保持简单。
根据
Copy file from source directory to binary directory using CMake
我应该可以用
configure_file(old new COPYONLY)
或
file(COPY old DESTINATION new)
. 对我来说都不管用。
配置\u文件(仅新旧复制)
文件(复制旧目标新目标)
创建一个名为
new
把文件
old
在里面。
the
file
command docs
GENERATE
如何无条件复制
${SRC_DIR}/old
${SRC_DIR}/new
?
如果需要,测试将在Fedora 28上进行:
$ cmake --version
cmake version 3.11.2
但我需要这个来回溯到cmake2.8,这是在当前发行版的领域中发现的。
$ cat CMakeLists.txt
cmake_minimum_required(VERSION 2.8.6)
if (${CMAKE_VERSION} VERSION_LESS "3.0.0")
project(cryptopp)
set(cryptopp_VERSION_MAJOR 7)
set(cryptopp_VERSION_MINOR 0)
set(cryptopp_VERSION_PATCH 0)
else ()
cmake_policy(SET CMP0048 NEW)
project(cryptopp VERSION 7.0.0)
if (NOT ${CMAKE_VERSION} VERSION_LESS "3.1.0")
cmake_policy(SET CMP0054 NEW)
endif ()
endif ()
set(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR})
include(GNUInstallDirs)
include(CheckCXXCompilerFlag)
file(COPY ${SRC_DIR}/adhoc.cpp.proto DESTINATION ${SRC_DIR} adhoc.cpp)
...
configure_file(adhoc.cpp.proto adhoc.cpp COPYONLY)
生产:
cmake_build$ rm -rf * && rm -rf ../adhoc.cpp && cmake ..
-- The C compiler identification is GNU 8.2.1
...
cmake_build$ ls ../adhoc*
../adhoc.cpp.proto
file(COPY ${SRC_DIR}/adhoc.cpp.proto DESTINATION ${SRC_DIR}/adhoc.cpp)
cmake_build$ rm -rf * && rm -rf ../adhoc.cpp && cmake ..
-- The C compiler identification is GNU 8.2.1
...
cmake_build$ ls ../adhoc*
../adhoc.cpp.proto
../adhoc.cpp:
adhoc.cpp.proto
file(COPY ${SRC_DIR}/adhoc.cpp.proto ${SRC_DIR}/adhoc.cpp DESTINATION ${SRC_DIR})
失败:
cmake_build$ rm -rf * && rm -rf ../adhoc.cpp && cmake ..
-- The C compiler identification is GNU 8.2.1
...
CMake Error at CMakeLists.txt:65 (file):
file COPY cannot find "/home/test/cryptopp/adhoc.cpp".
file(GENERATE OUTPUT ${SRC_DIR}/adhoc.cpp ${SRC_DIR}/adhoc.cpp.proto CONDITION true)
也失败了(就像
CONDITION 1
cmake_build$ rm -rf * && rm -rf ../adhoc.cpp && cmake ..
-- The C compiler identification is GNU 8.2.1
...
CMake Error at CMakeLists.txt:66 (file):
file Incorrect arguments to GENERATE subcommand.
file(WRITE ${SRC_DIR}/adhoc.cpp file(READ ${SRC_DIR}/adhoc.cpp.proto))
创建文件,但不计算
file(READ ...)
表达式:
cmake_build$ rm -rf * && rm -rf ../adhoc.cpp && cmake ..
-- The C compiler identification is GNU 8.2.1
...
$ cat ../adhoc.cpp
file(READ/home/test/cryptopp/adhoc.cpp.proto)