【问题标题】:How to compile source files with different-2 flags in cmake?如何在 cmake 中编译具有不同 2 标志的源文件?
【发布时间】:2018-06-01 07:59:39
【问题描述】:

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

例如我有:

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

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

谁能帮帮我?

【问题讨论】:

  • “不同的 2 个标志”是什么意思?从您的 Makefile 中,我看到您使用 same flags 编译所有源代码。

标签: cmake


【解决方案1】:

您可以使用 CMake 的 object libraries 来执行此操作:

# 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>)

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

【讨论】:

  • 我想在 CMakeLists.txt:243 (target_compile_definitions) 处看到命令“target_compile_definitions”中的错误:未知的 CMake 命令“target_compile_definitions”。 -- 配置不完整,出现错误!
  • 奇怪。你使用什么版本的 CMake?
  • 尝试使用 cmake 版本 2.8.8、Ubuntu 14.04 和 cmake 版本 3.5.1、Ubuntu 16.04
  • 对,target_compile_definitions 不受 2.8 支持,但 3.5 应该可以工作......无论如何,该命令添加了预处理器定义。相反,您可以使用add_definitions,这是旧的做法。 cmake.org/cmake/help/v2.8.0/cmake.html#command:add_definitions
  • 是的,我使用了 add_definitions 命令.. 非常感谢.. 非常感谢您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-14
  • 1970-01-01
  • 2015-03-16
  • 1970-01-01
相关资源
最近更新 更多