我想生成和更新Qt翻译文件,使用CMake。我的问题是,当我调用“make clean”时,我的“.ts”文件被删除。
我可以轻松重现这个问题。这是“CMakeLists.txt”的内容:
我考虑将翻译文件复制到构建目录中,并在此副本上进行操作,但这意味着源中发现的任何新翻译都会被放置在副本中,而不是初始文件。我必须手动将副本复制到源目录中。 此解决方案建议调用
为什么文件会首先被删除,如何避免这种行为而不禁用清理自定义文件?
谢谢,
我可以轻松重现这个问题。这是“CMakeLists.txt”的内容:
cmake_minimum_required(VERSION 3.7)
find_package(Qt5LinguistTools)
add_custom_command(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/tr.ts
COMMAND ${Qt5_LUPDATE_EXECUTABLE} -target-language en main.cpp -ts tr.ts
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
DEPENDS main.cpp
)
add_custom_target(foo DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/tr.ts)
并且翻译文件 tr.ts
:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="en">
<context>
<name>QObject</name>
<message>
<location filename="main.cpp" line="8"/>
<source>%_foo</source>
<translation>Foo</translation>
</message>
</context>
</TS>
我的源文件main.cpp
:
#include <QCoreApplication>
#include <QString>
#include <iostream>
int main(int argc, char* argv[])
{
QCoreApplication app(argc, argv);
QString what(QObject::tr("%_foo"));
std::cout << what.toStdString() << std::endl;
return app.exec();
}
只需配置构建目录并调用clean
目标即可:
mkdir build && cd build
cmake ..
make clean
我考虑将翻译文件复制到构建目录中,并在此副本上进行操作,但这意味着源中发现的任何新翻译都会被放置在副本中,而不是初始文件。我必须手动将副本复制到源目录中。 此解决方案建议调用
set_directory_properties(PROPERTIES CLEAN_NO_CUSTOM 1)
,它可以起作用,但仅适用于Makefile生成器。此外,该文件不存在于属性ADDITIONAL_MAKE_CLEAN_FILES
中。为什么文件会首先被删除,如何避免这种行为而不禁用清理自定义文件?
谢谢,
COMMAND
从add_custom_command
移动到add_custom_target
,并完全摆脱add_custom_command
。 - arrowd