目前,我需要帮助创建一个CMakeList.txt,或者简单地计算出下面的cmake命令。
我在同一个目录中有一些源文件,名为A.cpp、B.cpp、C.cpp、D.cpp。我需要编译这些文件,以便将可执行文件分别命名为A、B、C、D。
我希望使用CMake自动遍历目录并生成相应的可执行文件,而不是每次添加文件时都在CMakeList.txt中添加相应的可执行文件。
发布于 2020-08-15 02:43:22
这要求有点奇怪。通常,我建议在需要的地方手动编写add_executable,因为它更易于维护。
在CMake中,没有一种很好的方法来收集目录中的所有文件。您可以使用file(GLOB ...)获取所有文件;但这在配置时完成,如果引入新源,CMake将不会检测到新源,也不会自动重新配置或构建新源,而不会显式地被告知要重新配置。
如果您能够谨慎地列出每个源,则会更好。但是,否则,您所请求的内容可以通过一个foreach组合通过每个源文件,使用get_filename_component获取文件名并将其传递给add_executable。
set(source_files src/a.cpp src/b.cpp src/c.cpp ...)
# Loop through each source file
foreach(source_file IN LISTS source_files)
# Get the name of the file without the extension (e.g. 'a' from src/a.cpp'
get_filename_component(target_name ${source_file} NAME_WE)
# Create an executable with the above name, building the above source
add_executable("${target_name}" "${source_file}"
endforeach()如果不可能单独列出源文件,则可以使用file(GLOB...) or file(GLOB_RECURSE)
file(GLOB source_files "src/*.cpp")但是,这会防止在添加新源时自动检测,我不建议这样做。
https://stackoverflow.com/questions/63421949
复制相似问题