首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >取决于通用规则的目标类型

取决于通用规则的目标类型
EN

Stack Overflow用户
提问于 2020-06-30 19:37:07
回答 1查看 52关注 0票数 0

我的项目包含很多库和可执行文件。在Windows上,.rc文件用于嵌入元信息(版本、原始文件名等)。这些元信息之一是文件类型(VFT_DLL、VFT_APP)。因此,我向资源编译器(我在.rc中对其求值)添加了-D类型定义,以区分dll/exe。示例:

代码语言:javascript
复制
add_library (myLib SHARED "src/myLib.cpp"
                          "src/myLib.rc")
target_include_directories (myLib PUBLIC "include")
set_source_files_properties("src/myLib.rc" APPEND_STRING PROPERTY COMPILE_FLAGS "-DDLL")

我不会在几十个CMakeLists中重复我自己,有没有可能创建一个通用规则(例如在.cmake include中),即.rc文件将使用目标相关标志进行编译(在共享库的情况下为-DDLL)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-30 20:57:37

我会写一个小的包装器函数:

代码语言:javascript
复制
# Or maybe not object, depending on what you want
add_library(rc_for_shared OBJECT src/myLib.rc)
target_compile_definitions(rc_for_shared PRIVATE -DDLL)
add_library(rc_for_executable OBJECT src/myLib.rc)

# This is a draft from my memory
function(target_add_the_rc_file target)
     get_target_properties(target PROPERTIES TYPE type)
     if (type STREQUAL "SHARED")
        target_link_libraries(${target} rc_for_shared)
        # or maybe target_source(${target} $<TARGET_OBJECTS:rc_for_shared>)
        # depending on what you want
     elseif(type STREQUAL "EXECUTABLE")
        target_link_libraries(${target} rc_for_executable)
     endif()
 endfunction()

然后,您将:

代码语言:javascript
复制
add_library(myLib SHARED src/myLib.cpp)
target_include_directories(myLib PUBLIC)
target_add_the_rc_file(myLib)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62656565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档