CMake:如何从多个源文件创建一个对象?

时间:2017-07-14 16:07:58

标签: c cmake

要使用CMake构建一些C库,我需要从几个C源文件构建一个对象(构建静态库时)。使用add_library时,CMake将为每个源文件创建一个对象。 (在这种情况下,这会失败,因为*.c文件包含无法单独构建为对象的其他*.c文件,因为某些定义将丢失。)

在Make中看起来像这样

file.o: file_part1.c file_part2.c

有没有办法强制add_library只从所有C文件构建一个对象?

2 个答案:

答案 0 :(得分:0)

不确定它是否回答了您的问题,但通常会使用以下CMake代码段来收集文件并构建库:

# Collect files
# 
file(GLOB_RECURSE SOURCE_C ${YOUR_PROJECT_SRC_DIR}/ *.c)
file(GLOB_RECURSE SOURCE_H ${YOUR_PROJECT_HEADER_DIR}/ *.h)

# Add library target with its dependencies
#
add_library(YOUR_LIB_NAME ${SOURCE_C} ${SOURCE_H})

这不是最佳做法,因为如果您添加文件,生成的Makefile将无法检测到该文件,您必须重新运行cmake才能将其考虑在内。

答案 1 :(得分:0)

如评论中所述,每个编译单元总是有一个对象,因此解决方案是确保add_library中仅使用包含图中的顶级文件。然后,它们是唯一要编译为对象并链接到库的文件。 CMake可以自己找出所包含文件的依赖关系。

相关问题