如何使用CMake从qmake建模OTHER_FILES?

时间:2018-05-02 12:59:45

标签: qt cmake qt-creator qmake

在基于qmake的项目中,可以包含OTHER_FILES以在QtCreator中使用它们,例如。

QT += core gui widgets
TARGET = example-program
TEMPLATE = app

HEADERS = mainwindow.h
SOURCES = main.cpp mainwindow.cpp

OTHER_FILES = README.md LICENCE examples/network/server.c

这样可以轻松访问QtCreator中的README.md。具有相同目标的CMake文件类似于

cmake_minimum_required(VERSION 3.5)
project(example CXX)

set(CMAKE_AUTOMOC ON)

find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED)

set(HEADERS mainwindow.h)
set(SOURCES main.cpp mainwindow.cpp)
set(OTHER_FILES README.md LICENCE examples/network/server.c)

add_executable(example-program ${SOURCES} ${HEADERS})
target_link_libraries(example-program Qt5::Core Qt5::Gui Qt5::Widgets)

但是,OTHER_FILES未显示在QtCreator中,我必须通过“文件>打开”而不是项目浏览器访问它们。有解决方法吗?

2 个答案:

答案 0 :(得分:2)

添加非编译文件作为CMake目标的来源没有问题;如果CMake没有识别出他们的扩展名,他们就会忽略它们。所以你可以轻松地做到这一点:

add_executable(example-program ${SOURCES} ${HEADERS} ${OTHER_FILES})

对于可能与实际来源(基于其扩展名)混淆的文件,始终可以选择将其HEADER_FILE_ONLY属性设置为true:

set_source_files_properties(
  ${OTHER_FILES}
  PROPERTIES
  HEADER_FILE_ONLY TRUE
)

答案 1 :(得分:1)

您可以使用取决于给定文件的a custom target

add_custom_target(project-related-files SOURCES ${OTHER_FILES})

由于缺少COMMAND,因此会生成空目标,但仍会依赖SOURCES。这也是将其他文件包含到IDE中的官方方式:

  

SOURCES
      指定要包含在自定义目标中的其他源文件。指定的源文件将添加到IDE项目文件中,以便于编辑,即使它们没有构建规则。