[英]How to CMake compile a library as part of my app's source and not as static/shared library?
[英]CMake: Different compile definitions for static and shared library
在一個使用 cmake 的項目中,我構建了一個庫的兩個版本,一個是靜態的,一個是動態鏈接的。 對於單個源文件,我只想在為共享庫編譯時傳遞不同的編譯定義(即-Dfoo=bar
)。
我知道set_target_properties
可以在其中將COMPILE_DEFINITIONS
用於單個源,但我不知道如何僅為共享庫添加該定義。
如何做到這一點?
編輯
為了澄清這個問題的不同之處,我已經在制作同一個庫的兩個版本。
add_library(static_lib STATIC foo.cpp bar.cpp)
add_library(dyn_lib SHARED foo.cpp bar.cpp)
我想這樣做是為了添加目標屬性, foo.cpp
與編譯-Dbaz=True
編譯只有當foo.cpp
的dyn_lib
。
為庫目標dyn_lib
編譯的對象添加定義-Dbaz=True
的最簡單方法是使用target_compile_definition() 。
target_compile_definition(dyn_lib PRIVATE -Dbaz=True)
這實際上是為dyn_lib
目標設置COMPILE_DEFINITIONS
屬性的較短版本。
set_target_properties(dyn_lib PROPERTIES COMPILE_DEFINITIONS -Dbaz=True)
要編譯定義為-Dbaz=True
的單個源文件,請使用set_source_files_properties() 。
set_source_files_properties(file.cpp PROPERTIES COMPILE_DEFINITIONS -Dbaz=True)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.