cmake中特定于外部库的COMPILE_DEFINITIONS

时间:2014-11-17 20:47:47

标签: cmake

我写了一个用于查找QCustomPlot的cmake模块。但是,要使用共享库,需要#define QCUSTOMPLOT_USE_LIBRARY。我想通过cmake提供这个定义,自动将定义添加到任何使用QCustomPlot的项目。

以下是我的cmake模块的片段以及我目前尝试的解决方案:

SET(QCP_FOUND "NO")
IF(QCP_LIBRARY AND QCP_INCLUDE_DIR)
  SET(QCP_FOUND "YES")
  SET_PROPERTY(
    GLOBAL
    APPEND
    PROPERTY COMPILE_DEFINITIONS QCUSTOMPLOT_USE_LIBRARY
    )
ENDIF(QCP_LIBRARY AND QCP_INCLUDE_DIR)

但是,没有链接器在我的编译中附加-DQCUSTOMPLOT_USE_LIBRARY标志。解决这个问题的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

没有全局属性COMPILE_DEFINITIONS。但是目录,目标和源文件都有这样的属性(参见documentation)。所以最近的命令可能就是:

set(QCP_FOUND "NO")
if(QCP_LIBRARY AND QCP_INCLUDE_DIR)
  set(QCP_FOUND "YES")
  set_directory_properties(
      PROPERTIES COMPILE_DEFINITIONS QCUSTOMPLOT_USE_LIBRARY
  )
endif()

但我认为这种工作适用于进口目标:

add_library(QCP::qcp UNKNOWN IMPORTED)
set_target_properties(
    QCP::qcp
    PROPERTIES
    IMPORTED_LOCATION "${QCP_LIBRARY}"
    INTERFACE_INCLUDE_DIRECTORIES "${QCP_INCLUDE_DIR}"
    INTERFACE_COMPILE_DEFINITIONS QCUSTOMPLOT_USE_LIBRARY
)

和用法:

add_executable(foo ...)
target_link_libraries(foo PUBLIC QCP::qcp)