【发布时间】:2021-02-21 00:38:04
【问题描述】:
我正在使用 cmake 构建一个项目。项目使用外部库plplot;我已经为库和头文件配置了 cmake,并且缓存在变量${PLPLOT_LIBRARY}, ${PLPLOT_LIB_PATH} and ${PLPLOT_INCLUDE_PATH} 中。在 plplot 库中,一个函数已更改名称:plwid -> plwidth,我想检测到这一点。我写了一个小try_compile()测试:
try_compile(HAVE_PLWID ${CMAKE_BINARY_DIR} cmake/tests/test_plwid.c)
但是这个测试总是会失败,因为我必须将标头和库信息传递给try_compile 进程。像这样手动调用gcc:
gcc -I${PLPLOT_INCLUDE_PATH} cmake/tests/test_plwid.c -L${PLPLOT_LIB_PATH} -l${PLPLOT_LIBRARY}
有效。但是我不明白如何将必要的标志传递给try_compilecommand:我试过了:
try_compile(HAVE_PLWID ${CMAKE_BINARY_DIR} cmake/tests/test_plwid.c
INCLUDE_DIRECTORIES ${PLPLOT_INCLUDE_PATH}
LINK_DIRECTORIES ${PLPLOT_LIB_PATH}
LINK_LIBRARIES ${PLPLOT_LIBRARY})
然后我得到 cmake 配置错误:
Attempt at a recursive or nested TRY_COMPILE in directory
/path/to/build
我非常确信${PLPLOT_XXX} 变量是正确的,至少构建的其余部分基于这些变量可以正常工作。
更新:如果我使用--debug_trycompile 命令调用cmake,然后转到build/CMakeFiles/CMakeTmp 目录并手动调用cmakethere:
cmake . -DINCLUDE_DIRECTORIES=/path/plplot/include -DLINK_DIRECTORIES=/path/to/plplot/lib -DLINK_LIBRARIES=plplotd
测试程序将正确构建和链接;所以似乎挑战是将这些选项正确传递给try_compile()cmake 命令调用?
【问题讨论】:
标签: cmake