C ++ CMake(添加非构建文件)

时间:2012-06-10 21:43:18

标签: c++ cmake

我正在使用cmake来配置我的项目。我使用读取CMakeLists.txt的qtcreator可视化项目的文件。 我有一些文本文件(非代码:配置文件,日志,..),我想将它们添加到我的cmake项目,而不是(当然)编译/链接它们。可能吗 ? 它的主要目标是使用qtcreator在我的项目树中自动打开它们并编辑它们...... 谢谢你的帮助。

3 个答案:

答案 0 :(得分:17)

您应该可以将它们添加到您的资源列表中,无论哪个add_executableadd_library调用是合适的,它们都会显示在IDE中。

我相信CMake使用文件的扩展来确定它们是否是实际的源文件,所以如果你的扩展名为“.txt”或“.log”,它们将不会被编译。

答案 1 :(得分:1)

嗨,我已经创建了这种功能:

cmake_minimum_required(VERSION 3.5)
# cmake_parse_arguments needs cmake 3.5

##
# This function always adds sources to target, but when "WHEN" condition is not meet
# source is excluded from build process.
# This doesn't break build, but source is always visible for the project, what is 
# very handy when working with muti-platform project with sources needed
# only for specific platform
#
# Usage:
#      target_optional_sources(WHEN <condition> 
#                              TARGET <target>
#                              <INTERFACE|PUBLIC|PRIVATE> [items2...]
#                              [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
##
function(target_optional_sources)
    set(options OPTIONAL "")
    set(oneValueArgs WHEN TARGET)
    set(multiValueArgs PUBLIC PRIVATE INTERFACE)

    cmake_parse_arguments(target_optional_sources 
                          "${options}" "${oneValueArgs}" "${multiValueArgs}"
                          ${ARGN})

    target_sources(${target_optional_sources_TARGET}
                   PUBLIC ${target_optional_sources_PUBLIC}
                   PRIVATE ${target_optional_sources_PRIVATE}
                   INTERFACE ${target_optional_sources_INTERFACE})

    if (NOT ${target_optional_sources_WHEN})

        set_source_files_properties(${target_optional_sources_PUBLIC}
                                    PROPERTIES HEADER_FILE_ONLY TRUE)
        set_source_files_properties(${target_optional_sources_PRIVATE}
                                    PROPERTIES HEADER_FILE_ONLY TRUE)
        set_source_files_properties(${target_optional_sources_INTERFACE}
                                    PROPERTIES HEADER_FILE_ONLY TRUE)

    endif(NOT ${target_optional_sources_WHEN})

endfunction(target_optional_sources)

一方面,它可以按需工作,另一方面,some error is reported,因此仍可以进行工作。。 Issu变成了问题,我如何使用该函数而不是如何编写它。现在可以正常使用了。

答案 2 :(得分:0)

您可以创建一个自定义目标,让这些文件出现在您的 IDE 中:

add_custom_target(myapp-doc
    SOURCE readme.txt)