如何从cmake中的列表中删除令牌?

Pie*_*tro 5 makefile build cmake

我想在不在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})
Run Code Online (Sandbox Code Playgroud)

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

怎么了?

Com*_*sMS 7

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

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

list(REMOVE_ITEM SRC_LIST ./stdafx.h ./stdafx.cpp)
Run Code Online (Sandbox Code Playgroud)

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

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

引用文档aux_source_directory.