我写了一个用于查找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标志。解决这个问题的正确方法是什么?
答案 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)