繁体   English   中英

为什么在交叉编译时,CMake CMAKE_FIND_ROOT_PATH和CMAKE_INCLUDE_PATH不覆盖我的根文件系统?

[英]Why don't cmake CMAKE_FIND_ROOT_PATH and CMAKE_INCLUDE_PATH override my root filesystem when cross-compiling?

我已经在Ubuntu / x86_64上成功交叉编译了ARM的Poco库。 现在,我正在交叉编译使用Pococmake

我已经在目标文件系统上安装了Poco标头并将其包含在$(SDK_INSTALL_DIR)/filesystem/usr/local/include

我的主机文件系统上也有Poco开发库,它妨碍了工作。

在我程序的CMakeLists.txt ,我正在寻找Poco

find_path(POCO_INCLUDE_PATH "Poco/Net/HTTPClientSession.h" "../include")
MESSAGE(FATAL_ERROR "Poco: " ${POCO_INCLUDE_PATH-NOTFOUND} ":" ${POCO_INCLUDE_PATH})

我不断

Poco: :/usr/include

看来我的主机在/ usr / include中的Poco优先于安装在$(SDK_INSTALL_DIR)/ filesystem中的一个,而根本不应该搜索/ usr / local

我正在用命令运行cmake

. $(SDK_INSTALL_DIR)/environment-setup \
    && mkdir -p $(BANANA_DIR) \
    && cd $(BANANA_DIR) \
    && CMAKE_INSTALL_PREFIX=$(SDK_INSTALL_DIR)/filesystem/usr/local \
        CMAKE_FIND_ROOT_PATH=$(SDK_INSTALL_DIR)/filesystem \
        CMAKE_INCLUDE_PATH=$(SDK_INSTALL_DIR)/filesystem:$(SDK_INSTALL_DIR)/filesystem/usr/include:$(SDK_INSTALL_DIR)/filesystem/usr/local/include \
        CMAKE_LIBRARY_PATH=$(SDK_INSTALL_DIR)/filesystem/usr/lib:$(SDK_INSTALL_DIR)/filesystem/usr/local/lib \
        cmake ..

CMAKE_FIND_ROOT_PATHCMAKE_INCLUDE_PATH应该都具有优先权,但这没有发生。

编辑:我正在运行主机的cmake 在理想世界中,这无关紧要,但是我认为这是我的问题之一。 交叉编译工具链中没有cmake

如何获得我的find_path()包含正确的Poco 向CMakeLists.txt添加显式路径是一个糟糕的选择,因为我需要在不同平台上编译程序。

一个问题是复杂的设置-交叉编译时我正在使用主机的cmake

另一部分是尚不清楚的find_path()行为,其中没有以下任何组合:

  • find_path() NO_something标志
  • CMAKE_PREFIX_PATHCMAKE_FIND_ROOT_PATH甚至CMAKE_SYSTEM_LIBRARY_PATH变量

工作。

我最终通过构建命令使用了自己的FindPoco.cmake即刻FindPoco.cmake ):

CMAKE_INCLUDE_PATH=$(EXEC_DIR):$(EXEC_DIR)/usr/include:$(EXEC_DIR)/usr/local/include \
    CMAKE_LIBRARY_PATH=$(EXEC_DIR):$(EXEC_DIR)/usr/lib:$(EXEC_DIR)/usr/local/lib \
    POCO_ROOT=$(POCO_DIR) \
    cmake -DPoco_DIR=$(POCO_DIR)/cmake .. \
&& make VERBOSE=1

我的CMakeLists.txt现在只这样提到Poco:

find_package(Poco REQUIRED)
find_library(POCO_FOUNDATION PocoFoundation ${Poco_LIBRARY_DIRS} REQUIRED)
find_library(POCO_NET PocoNet ${Poco_LIBRARY_DIRS} REQUIRED)

include_directories(${Poco_INCLUDE_DIR})
target_link_libraries(detect ${POCO_FOUNDATION} ${POCO_NET})

甚至可能更短。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM