我的项目包含很多库和可执行文件。在Windows上,.rc文件用于嵌入元信息(版本、原始文件名等)。这些元信息之一是文件类型(VFT_DLL、VFT_APP)。因此,我向资源编译器(我在.rc中对其求值)添加了-D类型定义,以区分dll/exe。示例:
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)?
发布于 2020-06-30 20:57:37
我会写一个小的包装器函数:
# 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()然后,您将:
add_library(myLib SHARED src/myLib.cpp)
target_include_directories(myLib PUBLIC)
target_add_the_rc_file(myLib)https://stackoverflow.com/questions/62656565
复制相似问题