首页 > 解决方案 > 如何在 cmake 中编译具有不同 2 标志的源文件?

问题描述

我正在make将构建系统迁移到,cmake因此我需要使用不同的 (2) 标志编译源文件,然后创建静态库。

例如我有:

$(OBJSGEN): $(OBJDIR1)/%.o: $(SRCDIR)/%.cpp 

$(CC) $(FLAGS) $(CFLAGS) $(DFLAGS) $(EFLAGS1) $(INCLUDES) -c $<  -o $@

有人可以帮我吗?

标签: cmake

解决方案


您可以使用 CMake 的对象库来执行此操作:

# compiles source.cpp with -DSOME_DEF=1
add_library(obj1 OBJECT source.cpp)

# This is the "modern" syntax for setting preprocessor definitions:
target_compile_definitions(obj1 PRIVATE SOME_DEF=1)

# compiles source.cpp with -DSOME_DEF=2
add_library(obj2 OBJECT source.cpp)

# This is the "old" way of setting preprocessor definitions:
set_target_properties(obj2 PROPERTIES
    COMPILE_DEFINITIONS SOME_DEF=2)

# creates a static library with both objects
add_library(lib STATIC
    $<TARGET_OBJECTS:obj1>
    $<TARGET_OBJECTS:obj2>)

编辑:我包含了 CMake 2.8 兼容的方式来设置每个目标的预处理器定义,使用set_target_properties.


推荐阅读