我有两个目标 主要目标具有逻辑并使用自定义小部件。主要目标通过在运行时加载库并调用一些getter来获取此自定义窗口小部件。 第二个具有自定义小部件的库与主要目标链接,因为它需要查看IWidget接口。
那么,如何在建立主要目标后告诉cmake建立窗口小部件库?
编辑: 好的,很抱歉没有显示示例,这在具有大量cmake用户定义函数的大型项目中已经成为问题,因此很难显示代码。
更多背景信息: 我正在尝试为其他开发人员创建一种设置和使用该项目中自己的标准对话框实现的方法。因此,他们只能使用目标名称调用cmake函数,此对话框将尝试加载该目标并从那里获取自定义实现。
我猜看起来像这样
add_executable(main
"${PROJECT_SOURCE_DIR}/main.cpp"
)
add_target(SomeDialog
"${PROJECT_SOURCE_DIR}/Interface.h" # with some qt signals so it's not just header
)
add_target(CustomImplOfSomeDialog
"${PROJECT_SOURCE_DIR}/widget.cpp"
)
target_link_libraries(CustomImplOfSomeDialog
SomeDialog # need this because this CustomImpl implement Interface.h from SomeDialog
)
target_link_libraries(main
SomeDialog # main target always needs SomeDialog
)
我无法将此CustomImpl
添加到SomeDialog
的依赖项中,因为它会受到周期依赖,并且我无法将其设置为main
的依赖项,因为实际上有很多目标使用SomeDialog
,而我不能全部编辑它们。
在C ++代码中,widget.cpp
将尝试用CustomImpl
加载dll并将失败,因为没有理由让cmake告诉编译器构建CustomImplOfSomeDialog