【问题标题】:How to remove tokens from a list in cmake?如何从 cmake 的列表中删除标记?
【发布时间】:2014-08-18 13:49:29
【问题描述】:

我想在不在 Windows 中时从构建中排除一些源文件。
以下 CMakeLists.txt cmake 文件有什么问题?

aux_source_directory(. SRC_LIST)

# Remove Microsoft specific files
message(${SRC_LIST})

list(REMOVE_ITEM SRC_LIST stdafx.h stdafx.cpp)

message("------------------")
message(${SRC_LIST})

尝试删除这两个文件之前和之后的消息内容完全相同。

怎么了?

【问题讨论】:

  • 到目前为止,这看起来是正确的。问题可能出在SRC_LIST 的内容上。确保它确实是一个列表(即,值用分号分隔的字符串)并且它包含 stdafx.hstdafx.cpp 作为单数 (!) 元素。
  • 我得到一个非分隔文件的列表:./file1.cpp./file2.cpp./file3.cpp - 如何添加分号分隔符?
  • 这看起来不错。 message 对列表有一种特殊的格式,所以它们看起来根本没有分开。只有当您将空格视为分隔符时,您才应该担心。

标签: build makefile cmake


【解决方案1】:

您必须指定要删除的元素的确切名称。

在您的情况下,aux_source_directory 在每个条目前加上./,因此正确的命令必须是

list(REMOVE_ITEM SRC_LIST ./stdafx.h ./stdafx.cpp)

另外,请确保您了解使用手动调用 aux_source_directory 来维护源文件列表的含义:

使用这个命令来避免写入源列表是很有诱惑力的 库或可执行目标的文件。虽然这似乎有效, CMake 无法生成一个知道何时 添加了新的源文件。通常生成的构建系统 知道何时需要重新运行 CMake,因为 CMakeLists.txt 文件是 修改以添加新源。当源刚刚添加到 目录而不修改此文件,则必须手动 重新运行 CMake 以生成包含新文件的构建系统。

引用the documentation for aux_source_directory

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 2013-12-10
    • 1970-01-01
    • 2011-04-28
    相关资源
    最近更新 更多