我正在用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_compile
命令:我试过了:
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}
变量是正确的,至少其余的构建工作正常基于这些变量。
更新:如果我使用cmake
命令调用--debug_trycompile
并转到build/CMakeFiles/CMakeTmp
目录并手动调用cmake
:< / p>
cmake . -DINCLUDE_DIRECTORIES=/path/plplot/include -DLINK_DIRECTORIES=/path/to/plplot/lib -DLINK_LIBRARIES=plplotd
测试程序将正确构建和链接;所以似乎挑战是将这些选项正确地传递给try_compile()
cmake
命令调用?
答案 0 :(得分:4)
LINK_DIRECTORIES
和INCLUDE_DIRECTORIES
无法作为try_compile
的选项传递,但必须以CMAKE_FLAGS
选项作为额外标记传递,方法如下:
try_compile(HAVE_PLWID "${CMAKE_BINARY_DIR}/temp" "${CMAKE_SOURCE_DIR}/tests/test_plwid.c"
LINK_LIBRARIES ${PLPLOT_LIBRARY}
CMAKE_FLAGS
"-DINCLUDE_DIRECTORIES=${PLPLOT_INCLUDE_PATH}"
"-DLINK_DIRECTORIES=${PLPLOT_LIB_PATH}")