CMake не может найти переменную или каталог - PullRequest
0 голосов
/ 24 января 2020

Я попытался скомпилировать старую кодовую базу. Моя среда (в соответствии с требованиями кодовой базы):

  • Python 2.7
  • CMake 2.8.10.1

Предоставленный файл CMakeLists.txt выглядит следующим образом это:

cmake_minimum_required(VERSION 2.6)

project(KOL)

set (EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
#IF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
set (CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR})
#ENDIF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)

#check if Eigen exists
find_path(EIGEN_PATH NAMES Eigen PATHS ${EIGEN_DIR} REQUIRED)
if (NOT EIGEN_DIR)
    message(FATAL_ERROR "Eigen is not found, please specify by: -DEIGEN_DIR=<eigen_path>")
endif (NOT EIGEN_DIR)


FILE(GLOB data_files src/data/*.h)
FILE(GLOB loss_files src/loss/*.h)
FILE(GLOB opti_files src/kernel/*.h)
FILE(GLOB comm_files src/common/*.h)

set (data_files ${data_files} 
    src/data/basic_io.cpp 
    )

include_directories(
    ${EIGEN_PATH}
    )

#set (data_files ${datafiles} 
#    src/data/basic_io.cpp 
#    src/data/zlib_io.cpp 
#    src/data/gzip_io.cpp
#    )
source_group("data" FILES ${data_files})
source_group("loss" FILES ${loss_files})
source_group("kernel" FILES ${opti_files})
source_group("common" FILES ${comm_files})

set (SRC_LIST
    ${data_files} ${loss_files} ${opti_files} ${comm_files}
    )

IF(CMAKE_COMPILER_IS_GNUCXX)
    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-write-strings -O2 -s")
ENDIF(CMAKE_COMPILER_IS_GNUCXX)

add_executable(KOL src/Params.cpp src/Params.h 
    src/main.cpp ${SRC_LIST}) 
IF(UNIX)
    target_link_libraries(KOL pthread)
ENDIF(UNIX)

add_executable(Cacher src/data/Cacher.cpp ${data_files})
IF(UNIX)
    target_link_libraries(Cacher pthread)
ENDIF(UNIX)

install(TARGETS KOL Cacher
    DESTINATION .)

И моя команда: cmake -EIGEN_DIR=../Eigen -CMAKE_CXX_FLAGS='-std=c++0x -O3' ..

Ошибка:

loading initial cache file MAKE_CXX_FLAGS=-std=c++0x -O3
CMake Error: Error processing file:MAKE_CXX_FLAGS=-std=c++0x -O3
-- The C compiler identification is Clang 10.0.1
-- The CXX compiler identification is Clang 10.0.1
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
CMake Error at CMakeLists.txt:13 (message):
  Eigen is not found, please specify by: -DEIGEN_DIR=<eigen_path>

Моя структура проекта выглядит так:

--Master
 |--build
 |--Eigen
 |--CMakeLists.txt

Я выполнил команду внутри каталога build. Он продолжал говорить, что EIGEN_PATH не определен и Eigen не найден.

Я пытался -EIGEN_DIR=`pwd`/../Eigen. Я также попытался использовать -DEIGEN_DIR, но все равно получил ту же ошибку. Пожалуйста, помогите.

Ответы [ 2 ]

0 голосов
/ 24 января 2020

Вы должны использовать -DEIGEN_DIR из командной строки, указав папку в библиотеке Eigen, содержащую файл FindEigen.cmake (найдите его с помощью `find ../Eigen -name" * .CMake ").

Будьте осторожны, имя пакета должно точно соответствовать (с учетом регистра):

  • имя модуля поиска или сценария конфигурации (FindPackageName.cmake или PackageNameConfig.cmake)
  • в find_package вызов
  • имя PackageName_DIR
0 голосов
/ 24 января 2020

Чтобы указать переменную кэша через командную строку CMake, используйте флаг -D перед именами переменных EIGEN_DIR и CMAKE_CXX_FLAGS. Вот документация для параметров cmake командной строки и флагов . Поскольку при этом создаются кэшированные записи, попробуйте очистить кэш CMake перед запуском команды, чтобы избавиться от любых устаревших путей, оставшихся внутри.

Кроме того, обязательно используйте двойные кавычки " ... " при заключении флагов для переменной CMAKE_CXX_FLAGS:

cmake -DEIGEN_DIR=Eigen -DCMAKE_CXX_FLAGS="-std=c++0x -O3" ..
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...