我有一个关于本地安装库的问题。在我的项目中使用了 xmlrpc++0.7-library 库:
myproject/
+-- xmlrpc++0.7/
+-- src/
我希望CMake在找不到其他路径时能够使用本地xmlrpc++0.7目录。有两个问题,第一个是find_path()或find_library()不能与本地目录一起使用。我使用了一个变量处理的解决方法来测试find_xxx()是否为空。如果为空,我手动设置它们。现在CMake可以生成Makefile而不出错。但是,如果我想通过make编译项目,c ++编译器会返回“错误:XmlRpc.h:未找到文件”。文件XmlRpc.h位于myproject / xmlrpc++0.7 / src中,如果我手动编译所有内容,就可以正常工作。
这是我的CMakeLists.txt。如果有人能指导我正确的解决方案,让CMake在上述条件下运行,我会非常感谢。
--- CMakeLists.txt ---
项目名称(webservice_tesseract) 需要最低版本的CMAKE为2.6 设置当前目录包含在包含文件路径中
# 寻找tesseract 寻找路径为TESSERACT_INCLUDE_DIR/tesseract/tesseractmain.h的头文件 /opt/local/include /usr/local/include /usr/include 寻找名为'tesseract_main'的库文件 /opt/local/lib/ /usr/local/lib/ /usr/lib 提示信息:“已查找到tesseract库。” 提示信息:“已检测到头文件:[${TESSERACT_INCLUDE_DIR}]。” 提示信息:“已检测到库文件:[${TESSERACT_LIBRARY_DIR}]。” 添加导入静态库tesseract 将目标属性设置为tesseract的导入位置: ${TESSERACT_LIBRARY_DIR}/libtesseractmain.a
# 寻找xmlrpc++ 提示信息:“cmake主目录:[${CMAKE_HOME_DIRECTORY}]。 ” 设置LOCAL_XMLRPCPLUSPLUS为${CMAKE_HOME_DIRECTORY}/xmlrpc0.7++/ 提示信息:“xmlrpc++本地目录:[${LOCAL_XMLRPCPLUSPLUS}]。” 寻找路径为XmlRpcServer.h的头文件 ${LOCAL_XMLRPCPLUSPLUS}src /opt/local/include /usr/local/include /usr/include 寻找名为'XmlRpc'的库文件 ${LOCAL_XMLRPCPLUSPLUS} /opt/local/lib/ /usr/local/lib/ /usr/lib/ 如果(XMLRPCPLUSPLUS_INCLUDE_DIR)不为空,则跳过此if语句,否则将XMLRPCPLUSPLUS_INCLUDE_DIR设置为${LOCAL_XMLRPCPLUSPLUS}src 如果(XMLRPCPLUSPLUS_LIBRARY_DIR)不为空,则跳过此if语句,否则将XMLRPCPLUSPLUS_LIBRARY_DIR设置为${LOCAL_XMLRPCPLUSPLUS} 提示信息:“已查找到xmlrpc++库。” 提示信息:“已检测到头文件:[${XMLRPCPLUSPLUS_INCLUDE_DIR}]。” 提示信息:“已检测到库文件:[${XMLRPCPLUSPLUS_LIBRARY_DIR}]。” 添加导入静态库xmlrpc 将目标属性设置为xmlrpc的导入位置: ${XMLRPCPLUSPLUS_LIBRARY_DIR}/libXmlRpc.a
# 链接在一起 包含目录: ${XMLRPCPLUSPLUS_INCLUDE_DIR} ${TESSERACT_INCLUDE_DIR} 链接库搜索路径: ${XMLRPCPLUSPLUS_LIBRARY_DIR} ${TESSERACT_LIBRARY_DIR} 添加静态库simpleocr 包含simple_ocr.cpp 添加可执行文件webservice_tesseract 包含webservice.cpp 目标链接到以下库: xmlrpc tesseract simpleocr