我在理解如何在CMake中正确设置COMPILE_DEFINITIONS
目标属性时遇到问题。
我的目标是add_library(modelutilities STATIC ${modelutilities_SRCS})
我是否使用
set(modelutilities_COMPILE_DEFINE ${modelutilities_COMPILE_DEFINE} ${Qt5Widgets_COMPILE_DEFINITIONS})
set_target_properties(modelutilities PROPERTIES
VERSION "0.0.1"
SOVERSION 0
EXPORT_NAME "ModelUtilities"
ARCHIVE_OUTPUT_DIRECTORY "${modelutilities_PlatformDir}/lib"
LIBRARY_OUTPUT_DIRECTORY "${modelutilities_PlatformDir}/lib"
RUNTIME_OUTPUT_DIRECTORY "${modelutilities_PlatformDir}/bin"
COMPILE_DEFINITIONS ${modelutilities_COMPILE_DEFINE}
)
一切正常,但是如果我在set(modelutilities_COMPILE_DEFINE ${modelutilities_COMPILE_DEFINE} MODELUTILITIES_LIB)
之间添加另一行,则会停止工作,抱怨set_target_properties
被调用的参数数量错误。
任何人都可以发现我做错了什么?
P.S。
我已经尝试过使用双引号:set(modelutilities_COMPILE_DEFINE ${modelutilities_COMPILE_DEFINE} "MODELUTILITIES_LIB")
。它没有改变任何东西
P.P.S。
如果我在第一种情况下message(STATUS ${modelutilities_COMPILE_DEFINE})
QT_WIDGETS_LIB;QT_GUI_LIB;QT_CORE_LIB
而在第二种情况下QT_WIDGETS_LIB;QT_GUI_LIB;QT_CORE_LIB;MODELUTILITIES_LIB
答案 0 :(得分:1)
对于较新版本的CMake,正在传播的是目标的概念。因此,例如,现在优先使用include_directories()
代替target_include_directories()
。target_compile_definitions()
。
在这种情况下,我认为使用首选PUBLIC
为您的实用程序库设置编译定义会更好。
您获得的一个好处是,您可以使用PRIVATE
或 SELECT COUNT(Users) AS Users FROM room
关键字来定义编译定义。