cmake - 如何在 cmake 中编译具有不同 2 标志的源文件?
问题描述
我正在make
将构建系统迁移到,cmake
因此我需要使用不同的 (2) 标志编译源文件,然后创建静态库。
例如我有:
$(OBJSGEN): $(OBJDIR1)/%.o: $(SRCDIR)/%.cpp
$(CC) $(FLAGS) $(CFLAGS) $(DFLAGS) $(EFLAGS1) $(INCLUDES) -c $< -o $@
有人可以帮我吗?
解决方案
您可以使用 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
.
推荐阅读
- python - 如何在没有管理员权限的情况下安装 pywin32?
- sql-server - 第一列 OpenQuery 上的 SQL 不同
- sql - sql表中两列的区别
- c# - 使用 WebDriver 完成页面加载后,如何将鼠标悬停在页面内容之一上?加载后页面滚动到中心
- flutter - 带有模板模式的 Dart 枚举
- swift - 使用 Cryptokit 在钥匙串中存储钥匙时出现错误状态 -34018
- python - 为什么我的示例 google api 代码(python、admin、directory_v1)上出现 503 服务不可用?
- javascript - 为什么函数首先在console.log 中执行?
- java - 在 java 中使用 Connect Direct 传输 inputStream
- asp.net-mvc - 我想在 foreach 循环中的 div 上添加动态引导 bg 类