CMake COMPILE_DEFINITIONS触发错误的参数数量

时间:2018-03-22 18:05:54

标签: qt cmake

我在理解如何在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

1 个答案:

答案 0 :(得分:1)

对于较新版本的CMake,正在传播的是目标的概念。因此,例如,现在优先使用include_directories()代替target_include_directories()target_compile_definitions()

在这种情况下,我认为使用首选PUBLIC为您的实用程序库设置编译定义会更好。

您获得的一个好处是,您可以使用PRIVATE SELECT COUNT(Users) AS Users FROM room 关键字来定义编译定义。