2017-01-09 19 views
0

Как я могу заставить CMake искать библиотеки i386 вместо x86_64?Использование/usr/lib/i386-linux-gnu вместо/usr/lib/x86_64-linux-gnu для find_library в CMake

Я пытаюсь создать исполняемые файлы i386 linux на компьютере для последующего развертывания. Я убедился, что я установил i386-версию моих зависимостей, и они под /usr/lib/i386-linux-gnu, в то время как 64-битные библиотеки находятся под /usr/lib/x86_64-linux-gnu, как и ожидалось.

Однако я не могу найти способ заставить CMake выглядеть под /usr/lib/i386-linux-gnu для моих библиотек при построении 32 бит. Установка make CMAKE_CXX_FLAGS для включения -m32 приводит к сбою связи с отказом, поскольку компилятор создает 32-битный исполняемый файл и пытается связать с ним 64-битные библиотеки, чего, очевидно, это не может сделать. Он делает это, потому что он как-то предпочитает получать /usr/lib/x86_64-linux-gnu/libsfml-system.so за /usr/lib/i386-linux-gnu/libsfml-system.so.


То, что я пытался до сих пор:

  • Добавление -m32 к моим флагам компиляции, вызванный исполняемый не связывать
  • Установки моего CMAKE_FIND_ROOT_PATH к /usr/lib/i386-linux-gnu, надеясь, что это будет выглядеть в соответствии с этим сначала, хотя он все еще обнаружил 64-битные версии библиотек.

Я действительно не имеют каких-либо больше идей, хотя я активно исследовать на форумах, но я не могу найти много, что полезно. Может быть, у кого-то есть представление о том, что я могу сделать дальше.


Мои CMakeLists.txt как сейчас:

cmake_minimum_required(VERSION 3.5) 
project(Synapse) 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -pthread -O3 -m32") 

set(CMAKE_SYSTEM_PROCESSOR i386) 
set(CMAKE_SYSTEM_NAME Linux) 
set(CMAKE_SYSTEM_VERSION gnu) 

set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake_modules) 

find_package(SFML 2.4 COMPONENTS system window graphics network audio REQUIRED) 
include_directories(${SFML_INCLUDE_DIR}) 

message(STATUS ${SFML_LIBRARIES}) 

set(CLIENT_SOURCE_FILES Client/main.cpp types.h Client/Mouse.cpp Client/Mouse.h Client/Game.cpp Client/Game.h Client/Camera.cpp Client/Camera.h Client/Renderer.cpp Client/Renderer.h Networking.h) 
add_executable(SynapseClient ${CLIENT_SOURCE_FILES}) 

set(SERVER_SOURCE_FILES Server/main.cpp types.h Server/Game.cpp Server/Game.h Server/Commander.cpp Server/Commander.h Server/Unit.cpp Server/Unit.h Server/Client.cpp Server/Client.h Networking.h Server/Log.cpp Server/Log.h Server/User.cpp Server/User.h) 
add_executable(SynapseServer ${SERVER_SOURCE_FILES}) 

target_link_libraries(SynapseClient ${SFML_LIBRARIES}) 
target_link_libraries(SynapseServer ${SFML_LIBRARIES}) 
+0

Что в '$ {SFML_INCLUDE_DIR}?' ' – fedepad

+0

@fedepad/USR/include', как и ожидалось. – ChemiCalChems

+0

, так что похоже, что у вас есть «системный» sfml, который вы не установили из источника в пользовательском месте. – fedepad

ответ