我有两个使用 CMake 的项目。
第一个是共享库。它编译和安装很好。目前,仍然需要构建它的“调试”版本。所以目前它安装在~/localdebug
. 该文件夹看起来像具有“include”和“lib”目录的文件系统的根目录。与'/usr/local' 相同的概念。
二是节目。它需要编译并链接到我的库~/localdebug
。它的CMakeLists.txt
文件如下所示:
cmake_minimum_required(VERSION 2.6)
set(CMAKE_C_FLAGS "-std=gnu99")
#add_definitions(-pg)
find_library(SANDGROUSE_LIB NAMES sandgrouse)
add_library(http_parser http_parser.c)
add_executable(rsva11001adapter main.c rsva11001.c)
target_link_libraries(rsva11001adapter http_parser ${SANDGROUSE_LIB})
我运行以下命令来设置 make 文件:
cmake --debug-output -DCMAKE_BUILD_TYPE=Debug -DCMAKE_PREFIX_PATH="/home/ericu/localdebug" ..
基于 CMake wiki,设置DCMAKE_PREFIX_PATH
正是我想要的。
CMAKE_PREFIX_PATH
(自 CMake 2.6.0 起)在使用 FIND_PACKAGE()、FIND_PATH()、FIND_PROGRAM() 或 FIND_LIBRARY() 命令搜索包含文件、二进制文件或库时使用。对于 CMAKE_PREFIX_PATH 列表中的每个路径,CMake 将在 FIND_PATH() 被调用时检查“PATH/include”和“PATH”,在 FIND_PROGRAM() 被调用时检查“PATH/bin”和“PATH”,以及“PATH/lib”和调用 FIND_LIBRARY() 时的“PATH”。有关详细信息,请参阅 FIND_PACKAGE()、FIND_LIBRARY()、FIND_PATH() 和 FIND_PROGRAM() 的文档。
但是,当我执行 'make VERBOSE=1' 这就是我得到的:
cd /home/ericu/rsva11001adapter/build/src && /usr/bin/gcc -std=gnu99 -g -o CMakeFiles/rsva11001adapter.dir/main.co -c /home/ericu/rsva11001adapter/src/main.c
/ home/ericu/rsva11001adapter/src/main.c:19:31:致命错误:sandgrouse/server.h:没有此类文件或目录
编译终止。
因此,CMake 似乎没有在CMAKE_PREFIX_PATH
. 它显然也没有向-I
编译器调用添加变量。
对 CMakeCache.txt 的检查使它看起来好像不知道变量是什么:
// No help, variable specified on the command line.
CMAKE_PREFIX_PATH:UNINITIALIZED=/home/ericu/localdebug
我已经为此工作了一个多小时。如果很难使用非标准库,我几乎要放弃使用 CMake。