如何在QtCreator中使用CMAKE列出自定义文件?

时间:2017-04-10 09:15:55

标签: cmake qt-creator

使用CMAKE管理QtCreator下的项目,项目浏览器中不会显示一些有用的文件(例如xml文件,.ui文件等)。

有没有办法明确添加自定义文件,以便使用CMAKE在项目中列出?

#*************************************************************************
# Indicate a related file for the project, only for convenient showing in
# project, does not mean dependency, inclusion, but just related.
function ("IndicateExternalFile" NAME )
    # TODO: No idea how to make this.

endfunction()

到目前为止尝试:

file( GLOB "test.xml") #Not showing.

2 个答案:

答案 0 :(得分:1)

您可以添加自定义目标并将其他目标绑定到此目标。

示例:

add_custom_target(useful_files DEPENDS ALL 
    SOURCES
      MyUsefulFile.txt
      Read.me
      Version.txt
)

我在每个子文件夹中都使用它。 QtCreator在“项目”列表中显示添加的文件。

顺便说一句:我避免使用file( GLOB ...)。 CMake的文档有原因。

答案 1 :(得分:1)

将我的评论转化为答案

我已尝试使用,您只需将“自定义文件”作为源文件添加到您的库或可执行的CMake目标中,以显示在您的IDE项目中:

enter image description here

但我承认这对不存在/可选的文件不起作用。

因此,您可以将if (EXISTS ...)个检查添加到您的函数中,如下例所示:

cmake_minimum_required(VERSION 2.8)

project(CMakeTest)
add_executable(${PROJECT_NAME} "main.cpp")

function(IndicateExternalFile _target)
    foreach(_file IN ITEMS ${ARGN})
        if ((IS_ABSOLUTE "${_file}" AND EXISTS "${_file}") OR
            (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${_file}"))
            target_sources(${_target} PRIVATE "${_file}")
        endif()
    endforeach()
endfunction()

file(WRITE "text.xml" "")
IndicateExternalFile(${PROJECT_NAME} "text.xml" "test2.xml")

注意:您需要使用target_sources()添加“来源”的现有目标。