编辑CMakeLists.txt以使用-fPIC编译 [英] Edit CMakeLists.txt to compile with -fPIC

查看:4215
本文介绍了编辑CMakeLists.txt以使用-fPIC编译的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在为一个名为libnifalcon的NOVINT Falcon安装驱动程序。我使用cmake创建一个make文件,但是当我运行make我得到的错误:

 链接CXX共享库../ ../lib/libnifalcon_cli_base.so 
/ usr / bin / ld:/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib/libboost_program_options- mt.a(cmdline.o):在创建共享对象时,不能使用针对`.rodata.str1.1'的重定位R_X86_64_32;使用-fPIC重新编译
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib/libboost_program_options-mt.a:无法读取符号:错误值
collect2:ld返回1退出状态
make [2]:** [lib / libnifalcon_cli_base.so.1.0.1]错误1
make [1]:** [src / util /CMakeFiles/nifalcon_cli_base_SHARED.dir/all]错误2
make:*** [all]错误2


$ b b

我已经尝试了许多技术来编译usinf -fPIC,但没有一个工作。任何人都可以告诉我在makefile中的什么地方,以及为了使用-fPIC编译而编写什么?



makefile是:

 #CMAKE生成的文件:DO NOT EDIT! 
#生成的Unix MakefilesGenerator,CMake版本2.8

#默认目标执行时没有给出参数。
default_target:all
.PHONY:default_target

#========================== ==================================================== =
#由cmake提供的特殊目标。

#禁用隐式规则,以便规范的目标可以工作。
.SUFFIXES:

#从gmake中删除一些规则,不会删除.SUFFIXES。
SUFFIXES =

.SUFFIXES:.hpux_make_needs_suffix_list

#禁止显示执行的命令。
$(VERBOSE).SILENT:

#始终过期的目标。
cmake_force:
.PHONY:cmake_force

#=========================== ====================================================
#为构建设置环境变量。

#执行规则的shell。
#SHELL = / bin / sh

#CMake可执行文件。
CMAKE_COMMAND = / usr / bin / cmake

#删除文件的命令。
RM = / usr / bin / cmake -E remove -f

#用于编辑缓存的程序。
CMAKE_EDIT_COMMAND = / usr / bin / ccmake

#运行CMake的顶级源目录。
CMAKE_SOURCE_DIR = /home/mikewrock/Desktop/h3d/libnifalcon-1.0.1

#运行CMake的顶级构建目录。
CMAKE_BINARY_DIR = /home/mikewrock/Desktop/h3d/libnifalcon-1.0.1/linux

#===================== ==================================================== ========
#CMake全球提供的目标。

#目标的特殊规则edit_cache
edit_cache:
@ $(CMAKE_COMMAND)-E cmake_echo_color --switch = $(COLOR)--cyan运行CMake缓存编辑器。 ..
/ usr / bin / ccmake -H $(CMAKE_SOURCE_DIR)-B $(CMAKE_BINARY_DIR)
.PHONY:edit_cache

#目标的特殊规则edit_cache
edit_cache / fast:edit_cache
.PHONY:edit_cache / fast

#目标安装的特殊规则
install:preinstall
@ $(CMAKE_COMMAND)-E cmake_echo_color --switch = $(COLOR)--cyan安装项目...
/ usr / bin / cmake -P cmake_install.cmake
.PHONY:install

#目标安装的特殊规则
install / fast:preinstall / fast
@ $(CMAKE_COMMAND)-E cmake_echo_color --switch = $(COLOR)--cyan安装项目...
/ usr / bin / cmake -P cmake_install.cmake
.PHONY:install / fast

#目标安装/本地的特殊规则
install / local: preinstall
@ $(CMAKE_COMMAND)-E cmake_echo_color --switch = $(COLOR)--cyan仅安装本地目录...
/ usr / bin / cmake -DCMAKE_INSTALL_LOCAL_ONLY = 1 -P cmake_install.cmake
.PHONY:install / local

#目标安装/本地的特殊规则
install / local / fast:install / local
.PHONY: install / local / fast

#目标安装/条带的特殊规则
install / strip:preinstall
@ $(CMAKE_COMMAND)-E cmake_echo_color --switch = $ )--cyan正在安装项目...
/ usr / bin / cmake -DCMAKE_INSTALL_DO_STRIP = 1 -P cmake_install.cmake
.PHONY:install / strip

#目标安装/条带的特殊规则
install / strip / fast:install / strip
.PHONY:install / strip / fast

#目标的特殊规则list_install_components
list_install_components:
@ $(CMAKE_COMMAND)-E cmake_echo_color --switch = $(COLOR)--cyan可用的安装组件有:\Unspecified \
.PHONY:list_install_components

#目标的特殊规则list_install_components
list_install_components / fast:list_install_components
.PHONY:list_install_components / fast

#目标的特殊规则rebuild_cache
rebuild_cache:
@ $(CMAKE_COMMAND)-E cmake_echo_color --switch = $(COLOR)--cyan运行CMake以重新生成构建系统...
/ usr / bin / cmake - H $(CMAKE_SOURCE_DIR)-B $(CMAKE_BINARY_DIR)
.PHONY:rebuild_cache

#目标的特殊规则rebuild_cache
rebuild_cache / fast:rebuild_cache
.PHONY: rebuild_cache / fast

#主要所有目标
all:cmake_check_build_system
$(CMAKE_COMMAND)-E cmake_progress_start /home/mikewrock/Desktop/h3d/libnifalcon-1.0.1/linux / CMakeFiles /home/mikewrock/Desktop/h3d/libnifalcon-1.0.1/linux/CMakeFiles/progress.marks
$(MAKE)-f CMakeFiles / Makefile2 all
$(CMAKE_COMMAND)-E cmake_progress_start / home / mikewrock / Desktop / h3d / libnifalcon-1.0.1 / linux / CMakeFiles 0
.PHONY:all

#主干净目标
clean:
$ (MAKE)-f CMakeFiles / Makefile2 clean
.PHONY:clean

#主干净目标
clean / fast:clean
.PHONY:clean / fast

#准备安装目标。
preinstall:all
$(MAKE)-f CMakeFiles / Makefile2预安装
.PHONY:preinstall

#准备安装目标。
preinstall / fast:
$(MAKE)-f CMakeFiles / Makefile2 preinstall
.PHONY:preinstall / fast

#clear depends
depend:
$(CMAKE_COMMAND)-H $(CMAKE_SOURCE_DIR)-B $(CMAKE_BINARY_DIR)--check-build-system CMakeFiles / Makefile.cmake 1
.PHONY:depend

# ==================================================== ==========================
#名为nifalcon_DEPEND的目标的目标规则

#目标的构建规则。
nifalcon_DEPEND:cmake_check_build_system
$(MAKE)-f CMakeFiles / Makefile2 nifalcon_DEPEND
.PHONY:nifalcon_DEPEND

目标的快速构建规则。
nifalcon_DEPEND / fast:
$(MAKE)-f src / CMakeFiles / nifalcon_DEPEND.dir / build.make src / CMakeFiles / nifalcon_DEPEND.dir / build
.PHONY:nifalcon_DEPEND / fast

#======================================= ================================
#名为nifalcon_SHARED的目标的目标规则

#为目标构建规则。
nifalcon_SHARED:cmake_check_build_system
$(MAKE)-f CMakeFiles / Makefile2 nifalcon_SHARED
.PHONY:nifalcon_SHARED

目标的快速构建规则。
nifalcon_SHARED / fast:
$(MAKE)-f src / CMakeFiles / nifalcon_SHARED.dir / build.make src / CMakeFiles / nifalcon_SHARED.dir / build
.PHONY:nifalcon_SHARED / fast

#======================================= ================================
#目标规则为nifalcon_STATIC

#为目标构建规则。
nifalcon_STATIC:cmake_check_build_system
$(MAKE)-f CMakeFiles / Makefile2 nifalcon_STATIC
.PHONY:nifalcon_STATIC

目标的快速构建规则。
nifalcon_STATIC / fast:
$(MAKE)-f src / CMakeFiles / nifalcon_STATIC.dir / build.make src / CMakeFiles / nifalcon_STATIC.dir / build
.PHONY:nifalcon_STATIC / fast

#======================================= ================================
#名为nifalcon_cli_base_DEPEND的目标的目标规则

#为目标构建规则。
nifalcon_cli_base_DEPEND:cmake_check_build_system
$(MAKE)-f CMakeFiles / Makefile2 nifalcon_cli_base_DEPEND
.PHONY:nifalcon_cli_base_DEPEND

目标的快速构建规则。
nifalcon_cli_base_DEPEND /快:
$(MAKE)-f的src / UTIL / CMakeFiles / nifalcon_cli_base_DEPEND.dir / build.make的src / UTIL / CMakeFiles / nifalcon_cli_base_DEPEND.dir /建造
.PHONY:nifalcon_cli_base_DEPEND / fast

#======================================= ==================================
#目标规则名为nifalcon_cli_base_SHARED

#构建目标的规则。
nifalcon_cli_base_SHARED:cmake_check_build_system
$(MAKE)-f CMakeFiles / Makefile2 nifalcon_cli_base_SHARED
.PHONY:nifalcon_cli_base_SHARED

目标的快速构建规则。
nifalcon_cli_base_SHARED /快:
$(MAKE)-f的src / UTIL / CMakeFiles / nifalcon_cli_base_SHARED.dir / build.make的src / UTIL / CMakeFiles / nifalcon_cli_base_SHARED.dir /建造
.PHONY:nifalcon_cli_base_SHARED / fast

#======================================= ==================================
#目标规则名为nifalcon_cli_base_STATIC

#构建目标的规则。
nifalcon_cli_base_STATIC:cmake_check_build_system
$(MAKE)-f CMakeFiles / Makefile2 nifalcon_cli_base_STATIC
.PHONY:nifalcon_cli_base_STATIC

目标的快速构建规则。
nifalcon_cli_base_STATIC /快:
$(MAKE)-f的src / UTIL / CMakeFiles / nifalcon_cli_base_STATIC.dir / build.make的src / UTIL / CMakeFiles / nifalcon_cli_base_STATIC.dir /建造
.PHONY:nifalcon_cli_base_STATIC / fast

#======================================= ==================================
#目标规则名为nifalcon_device_boost_thread_DEPEND

#构建目标的规则。
nifalcon_device_boost_thread_DEPEND:cmake_check_build_system
$(MAKE)-f CMakeFiles / Makefile2 nifalcon_device_boost_thread_DEPEND
.PHONY:nifalcon_device_boost_thread_DEPEND

目标的快速构建规则。
nifalcon_device_boost_thread_DEPEND /快:
$(MAKE)-f的src / UTIL / CMakeFiles / nifalcon_device_boost_thread_DEPEND.dir / build.make的src / UTIL / CMakeFiles / nifalcon_device_boost_thread_DEPEND.dir /建造
.PHONY:nifalcon_device_boost_thread_DEPEND / fast

#======================================= ==================================
#目标规则名为nifalcon_device_boost_thread_SHARED

#构建目标的规则。
nifalcon_device_boost_thread_SHARED:cmake_check_build_system
$(MAKE)-f CMakeFiles / Makefile2 nifalcon_device_boost_thread_SHARED
.PHONY:nifalcon_device_boost_thread_SHARED

#快速构建目标规则。
nifalcon_device_boost_thread_SHARED /快:
$(MAKE)-f的src / UTIL / CMakeFiles / nifalcon_device_boost_thread_SHARED.dir / build.make的src / UTIL / CMakeFiles / nifalcon_device_boost_thread_SHARED.dir /建造
.PHONY:nifalcon_device_boost_thread_SHARED / fast

#======================================= ==================================
#目标规则名为nifalcon_device_boost_thread_STATIC

#构建目标的规则。
nifalcon_device_boost_thread_STATIC:cmake_check_build_system
$(MAKE)-f CMakeFiles / Makefile2 nifalcon_device_boost_thread_STATIC
.PHONY:nifalcon_device_boost_thread_STATIC

#为目标快速生成规则。
nifalcon_device_boost_thread_STATIC /快:
$(MAKE)-f的src / UTIL / CMakeFiles / nifalcon_device_boost_thread_STATIC.dir / build.make的src / UTIL / CMakeFiles / nifalcon_device_boost_thread_STATIC.dir /建造
.PHONY:nifalcon_device_boost_thread_STATIC / fast

#======================================= ==================================
#目标规则为barrow_mechanics

#构建目标的规则。
barrow_mechanics:cmake_check_build_system
$(MAKE)-f CMakeFiles / Makefile2 barrow_mechanics
.PHONY:barrow_mechanics

目标的快速构建规则。
barrow_mechanics / fast:
$(MAKE)-f examples / CMakeFiles / barrow_mechanics.dir / build.make examples / CMakeFiles / barrow_mechanics.dir / build
.PHONY:barrow_mechanics / fast

#======================================= ================================
#名为falcon_led的目标的目标规则

#为目标构建规则。
falcon_led:cmake_check_build_system
$(MAKE)-f CMakeFiles / Makefile2 falcon_led
.PHONY:falcon_led

目标的快速构建规则。
falcon_led / fast:
$(MAKE)-f examples / CMakeFiles / falcon_led.dir / build.make examples / CMakeFiles / falcon_led.dir / build
.PHONY:falcon_led / fast

#======================================= ==============================
#名为falcon_test_cli的目标规则

#为目标构建规则。
falcon_test_cli:cmake_check_build_system
$(MAKE)-f CMakeFiles / Makefile2 falcon_test_cli
.PHONY:falcon_test_cli

目标的快速构建规则。
falcon_test_cli / fast:
$(MAKE)-f examples / CMakeFiles / falcon_test_cli.dir / build.make examples / CMakeFiles / falcon_test_cli.dir / build
.PHONY:falcon_test_cli / fast

#======================================= ================================
#命名为findfalcons的目标的目标规则

#为目标构建规则。
findfalcons:cmake_check_build_system
$(MAKE)-f CMakeFiles / Makefile2 findfalcons
.PHONY:findfalcons

目标的快速构建规则。
findfalcons / fast:
$(MAKE)-f examples / CMakeFiles / findfalcons.dir / build.make examples / CMakeFiles / findfalcons.dir / build
.PHONY:findfalcons / fast

#======================================= ================================
#目标规则名为findfalcons_multi

#为目标构建规则。
findfalcons_multi:cmake_check_build_system
$(MAKE)-f CMakeFiles / Makefile2 findfalcons_multi
.PHONY:findfalcons_multi

目标的快速构建规则。
findfalcons_multi / fast:
$(MAKE)-f examples / CMakeFiles / findfalcons_multi.dir / build.make examples / CMakeFiles / findfalcons_multi.dir / build
.PHONY:findfalcons_multi / fast

#帮助目标
help:
@echo以下是这个Makefile的一些有效目标:
@echo... all(默认if没有提供目标)
@echo... clean
@echo... depend
@echo... edit_cache
@echo。 .. install
@echo... install / local
@echo... install / strip
@echo... list_install_components
@echo ... rebuild_cache
@echo... nifalcon_DEPEND
@echo... nifalcon_SHARED
@echo... nifalcon_STATIC
@echo。 .. nifalcon_cli_base_DEPEND
@echo... nifalcon_cli_base_SHARED
@echo... nifalcon_cli_base_STATIC
@echo... nifalcon_device_boost_thread_DEPEND
@echo... nifalcon_device_boost_thread_SHARED
@echo... nifalcon_device_boost_thread_STATIC
@echo... barrow_mechanics
@echo... falcon_led
@echo... falcon_test_cli
@echo... findfalcons
@echo... findfalcons_multi
.PHONY:help



# ==================================================== ========================
#清除make的操作的特殊目标。

#运行CMake以检查构建系统完整性的特殊规则。
#取决于此的规则可以有来自listfiles
#的命令,因为它们可能被重新生成。
cmake_check_build_system:
$(CMAKE_COMMAND)-H $(CMAKE_SOURCE_DIR)-B $(CMAKE_BINARY_DIR)--check-build-system CMakeFiles / Makefile.cmake 0
.PHONY:cmake_check_build_system

感谢您的帮助
-迈克尔



编辑:根据建议,我已经尝试修改CMakeLists.txt而不是它生成的makefile。我仍然有同样的问题,所以这里是CMakeLists.txt:

  ######### ################################################## ########################## 
#CMake指令
############ ################################################## ########################

#Require 2.6或更高版本。
CMAKE_MINIMUM_REQUIRED(VERSION 2.6.0 FATAL_ERROR)

#看看我们是否有cmake模块签出。如果没有,建议这样做。
如果(EXISTS$ {CMAKE_SOURCE_DIR} /../ compily_buildd / cmake)
SET(BUILDSYS_CMAKE_DIR$ {CMAKE_SOURCE_DIR} /../compily_buildd / cmake)
MESSAGE(状态利用外部compily_buildd目录$ {BUILDSYS_CMAKE_DIR})
ELSEIF(存在$ {CMAKE_SOURCE_DIR} / compily_buildd / cmake的)
SET(BUILDSYS_CMAKE_DIR$ {CMAKE_SOURCE_DIR} / compily_buildd / cmake的)
MESSAGE(STATUSusing compily_buildd git submodule $ {BUILDSYS_CMAKE_DIR})
ELSE(EXISTS$ {CMAKE_SOURCE_DIR} / compily_buildd / cmake)
MESSAGE(FATAL_ERROR
无法找到compily_buildd目录labs项目编译函数。\\\

确保您已将compily_buildd目录放在与存储库目录相同的根目录中,或者已使用compily_buildd子模块(git submodule update --init) 。\\\

NP Labs构建存储库位于git://github.com/qdot/compily_buildd.git

ENDIF(EXISTS$ {CMAKE_SOURCE_DIR} /。 ./compily_buildd/cmake)

LIST(APPEND CMAKE_MODULE_PATH $ {BUILDSYS_CMAKE_DIR})

INCLUDE($ {BUILDSYS_CMAKE_DIR} /BuildSysCMakeLib.cmake)

#设置链接目录策略

IF(COMMAND cmake_policy)
CMAKE_POLICY(SET CMP0003 NEW)
ENDIF(COMMAND cmake_policy)

#### ################################################## #######################################
#项目声明和选项
##### ################################################## ###############################

#项目声明

PROJECT(LIBNIFALCON)
组(CMAKE_C_COMPILER海合会)
组(CMAKE_CXX_COMPILERG ++)
组(CMAKE_CXX_FLAGS$ {CMAKE_CXX_FLAGS} -fPIC)
INITIALIZE_BUILD()

#Common选项

OPTION_LIBRARY_BUILD_STATIC(ON)
#我们不能在MSVC上构建共享
IF(NOT MSVC)
OPTION_LIBRARY_BUILD_SHARED (ON)
ENDIF(NOT MSVC)
OPTION_FAST_MATH(ON)
OPTION_ARCH_OPTS(ON)
OPTION_GPROF(OFF)
#OPTION_LOG4CXX(OFF LIBNIFALCON_REQ_LIBS)
#OPTION_CREATE_VERSION_FILE(ON$ {CMAKE_CURRENT_SOURCE_DIR} /src/version.cc)

#项目特定选项

OPTION(FORCE_FTD2XX_BUILD在非Windows平台上强制构建FTD2XX库OFF
OPTION(STATIC_LINK_SUFFIXES在静态库中添加一个与[library_name] _s相关的符号链接,以便于在gcc下构建静态链接的二进制文件)OFF)
OPTION(BUILD_SWIG_BINDINGS对于libnifalconOFF)
OPTION(BUILD_EXAMPLESBuild libnifalcon examplesON)

################ ################################################## #############
#项目特定软件包查找
######################## ################################################## ############

#Find通讯库
IF(WIN32 OR FORCE_FTD2XX_BUILD)
FIND_PACKAGE(libftd2xx)
IF(LIBFTD2XX_FOUND)
INCLUDE_DIRECTORIES($ {LIBFTD2XX_INCLUDE_DIRS})
SET(LIBNIFALCON_REQ_LIBS $ {LIBFTD2XX_LIBRARIES})
ENDIF(LIBFTD2XX_FOUND)
ENDIF(WIN32或FORCE_FTD2XX_BUILD)

如果(NOT LIBFTD2XX_FOUND)
FIND_PACKAGE(的libusb-1.0)
如果(LIBUSB_1_FOUND)
INCLUDE_DIRECTORIES($ {LIBUSB_1_INCLUDE_DIRS})
SET(LIBNIFALCON_REQ_LIBS $ {LIBUSB_1_LIBRARIES})
ENDIF (LIBUSB_1_FOUND)
ENDIF(NOT LIBFTD2XX_FOUND)

IF(NOT LIBFTD2XX_FOUND AND NOT LIBUSB_1_FOUND)
MESSAGE(FATAL_ERROR需要ftd2xx或libusb-1.0才能构建libnifalcon。
ENDIF(NOT LIBFTD2XX_FOUND AND NOT LIBUSB_1_FOUND)

#Find boost,用于所有地方
SET(Boost_USE_MULTITHREADED ON)
SET(Boost_USE_STATIC_LIBS ON)

FIND_PACKAGE(Boost REQUIRED)
IF(NOT Boost_FOUND)
MESSAGE(FATAL_ERRORlibnifalcon至少需要Boost 1.33头文件)
ENDIF(NOT Boost_FOUND)

FIND_PACKAGE(Boost COMPONENTS program_options线程)

############ ################################################## #################
#项目特定全域
##################### ################################################## ###############

#library定义

SET(LIBNIFALCON_MAJOR_VERSION 1)
SET(LIBNIFALCON_MINOR_VERSION 0)
SET(LIBNIFALCON_BUILD_VERSION 1)

#BUILDSYS_CPACK_INFO(
#NAMElibnifalcon
#MAJOR_VERSION $ {LIBNIFALCON_MAJOR_VERSION}
#MINOR_VERSION $ {LIBNIFALCON_MINOR_VERSION}
#BUILD_VERSION $ {LIBNIFALCON_BUILD_VERSION}
#VENDOR非多学科实验室
#DESCRIPTIONNovint Falcon触觉控制器的开源驱动程序
#)
#INCLUDE(CPack)

设置(LIBNIFALCON_VERSION $ {} LIBNIFALCON_MAJOR_VERSION $ {} LIBNIFALCON_MINOR_VERSION $ {} LIBNIFALCON_BUILD_VERSION)

#library名称定义

CREATE_LIBRARY_LINK_NAME(nifalcon)
CREATE_LIBRARY_LINK_NAME(nifalcon_cli_base)
CREATE_LIBRARY_LINK_NAME(nifalcon_device_boost_thread)

SET(LIBNIFALCON_INCLUDE_DIR$ {CMAKE_SOURCE_DIR} /包括)

INCLUDE_DIRECTORIES($ {LIBNIFALCON_INCLUDE_DIR} $ {Boost_INCLUDE_DIRS})
LINK_DIRECTORIES($ {LIBRARY_OUTPUT_PATH})

如果我们在apple上构建libusb staticly,我们需要合适的框架
IF(BUILD_STATIC AND APPLE)
LIST(APPEND LIBNIFALCON_EXE_LINK_LIBS-framework IOKit-framework CoreFoundation)
ENDIF(BUILD_STATIC AND APPLE)

LIST(APPEND LIBNIFALCON_EXE_LINK_LIBS
$ {libnifalcon_LIBRARY}
$ {LIBNIFALCON_REQ_LIBS}


ADD_SUBDIRECTORY(include)
ADD_SUBDIRECTORY(src)
IF(BUILD_EXAMPLES)
ADD_SUBDIRECTORY(示例)
ENDIF (BUILD_EXAMPLES)
IF(BUILD_SWIG_BINDINGS)
ADD_SUBDIRECTORY(lang / swig)
ENDIF(BUILD_SWIG_BINDINGS)

#pkg-config(使用CPack信息)
#FIND_PACKAGE(PkgConfig)
#if(PKG_CONFIG_EXECUTABLE)
#set(PC_SHORT_NAME$ {BUILDSYS_CPACK_NAME})
#set(PC_LONG_NAME$ {BUILDSYS_CPACK_NAME})
#集(PC_LIBRARY_NAME$ {LIBNIFALCON_CPP})
#集(PC_DESCRIPTION$ {CPACK_PACKAGE_DESCRIPTION_SUMMARY})
#集(PC_VERSION$ {LIBNIFALCON_MAJOR_VERSION} $ {LIBNIFALCON_MINOR_VERSION} $ {LIBNIFALCON_BUILD_VERSION})

#if(LIBUSB_1_FOUND)
#set(PC_REQUIRES$ {PC_REQUIRES} libusb-1.0)
#set(PC_LINK_FLAGS$ {PC_LINK_FLAGS} -lnifalcon_comm_libusb)
#endif(LIBUSB_1_FOUND)

#set(PC_LINK_FLAGS$ {lib $ {PC_LIBRARY_NAME} _LINK_FLAGS} $ {PC_LINK_FLAGS})
#set(PC_LINK_FLAGS-l $ {PC_LIBRARY_NAME} $ {PC_LINK_FLAGS})
#set(PC_COMPILE_FLAGS$ {lib $ {PC_LIBRARY_NAME} _COMPILE_FLAGS})
#set(PC_CONFIGURED_FILE
#$ {CMAKE_BINARY_DIR} /libnifalcon.pc
#)
#MESSAGE( - 正在产生$ {PC_CONFIGURED_FILE})
#configure_file(
#$ {CMAKE_SOURCE_DIR} /libnifalcon.pc.cmake
#$ {PC_CONFIGURED_FILE }
#@ONLY
#)
#set(PKG_CONFIG_DIR$ {CMAKE_INSTALL_PREFIX} / lib / pkgconfig)
#install(FILES $ {PC_CONFIGURED_FILE} DESTINATION $ {PKG_CONFIG_DIR} )
#endif(PKG_CONFIG_EXECUTABLE)


解决方案可以在Makefile中添加以下内容。

  CFLAGS + = -fPIC 
CPPFLAGS + = -fPIC

但是,真的,你应该修改cmake的代码,然后重新生成Makefile。应该有一个方法添加到cmake中的CFLAGS。



编辑:看起来你可以在cmake输入文件中设置cmake变量CMAKE_C_FLAGS和CMAKE_CXX_FLAGS。


I'm trying to install drivers for a NOVINT Falcon called libnifalcon. I used cmake to create a make file, but when I run make I get the error:

Linking CXX shared library ../../lib/libnifalcon_cli_base.so  
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib/libboost_program_options-mt.a(cmdline.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC  
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib/libboost_program_options-mt.a: could not read symbols: Bad value  
collect2: ld returned 1 exit status  
make[2]: ** [lib/libnifalcon_cli_base.so.1.0.1] Error 1  
make[1]: ** [src/util/CMakeFiles/nifalcon_cli_base_SHARED.dir/all] Error 2  
make: *** [all] Error 2  

I've tried many of the techniques to compile usinf -fPIC but none have worked. Can anyone tell me where in the makefile, and what to write in order to compile using -fPIC?

The makefile is:

            # CMAKE generated file: DO NOT EDIT!
            # Generated by "Unix Makefiles" Generator, CMake Version 2.8

            # Default target executed when no arguments are given to make.
            default_target: all
            .PHONY : default_target

            #=============================================================================
            # Special targets provided by cmake.

            # Disable implicit rules so canonical targets will work.
            .SUFFIXES:

            # Remove some rules from gmake that .SUFFIXES does not remove.
            SUFFIXES =

            .SUFFIXES: .hpux_make_needs_suffix_list

            # Suppress display of executed commands.
            $(VERBOSE).SILENT:

            # A target that is always out of date.
            cmake_force:
            .PHONY : cmake_force

            #=============================================================================
            # Set environment variables for the build.

            # The shell in which to execute make rules.
            #SHELL = /bin/sh

            # The CMake executable.
            CMAKE_COMMAND = /usr/bin/cmake

            # The command to remove a file.
            RM = /usr/bin/cmake -E remove -f

            # The program to use to edit the cache.
            CMAKE_EDIT_COMMAND = /usr/bin/ccmake

            # The top-level source directory on which CMake was run.
            CMAKE_SOURCE_DIR = /home/mikewrock/Desktop/h3d/libnifalcon-1.0.1

            # The top-level build directory on which CMake was run.
            CMAKE_BINARY_DIR = /home/mikewrock/Desktop/h3d/libnifalcon-1.0.1/linux

            #=============================================================================
            # Targets provided globally by CMake.

            # Special rule for the target edit_cache
            edit_cache:
                @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake cache editor..."
                /usr/bin/ccmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
            .PHONY : edit_cache

            # Special rule for the target edit_cache
            edit_cache/fast: edit_cache
            .PHONY : edit_cache/fast

            # Special rule for the target install
            install: preinstall
                @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
                /usr/bin/cmake -P cmake_install.cmake
            .PHONY : install

            # Special rule for the target install
            install/fast: preinstall/fast
                @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
                /usr/bin/cmake -P cmake_install.cmake
            .PHONY : install/fast

            # Special rule for the target install/local
            install/local: preinstall
                @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..."
                /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake
            .PHONY : install/local

            # Special rule for the target install/local
            install/local/fast: install/local
            .PHONY : install/local/fast

            # Special rule for the target install/strip
            install/strip: preinstall
                @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..."
                /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake
            .PHONY : install/strip

            # Special rule for the target install/strip
            install/strip/fast: install/strip
            .PHONY : install/strip/fast

            # Special rule for the target list_install_components
            list_install_components:
                @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\""
            .PHONY : list_install_components

            # Special rule for the target list_install_components
            list_install_components/fast: list_install_components
            .PHONY : list_install_components/fast

            # Special rule for the target rebuild_cache
            rebuild_cache:
                @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..."
                /usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
            .PHONY : rebuild_cache

            # Special rule for the target rebuild_cache
            rebuild_cache/fast: rebuild_cache
            .PHONY : rebuild_cache/fast

            # The main all target
            all: cmake_check_build_system
                $(CMAKE_COMMAND) -E cmake_progress_start /home/mikewrock/Desktop/h3d/libnifalcon-1.0.1/linux/CMakeFiles /home/mikewrock/Desktop/h3d/libnifalcon-1.0.1/linux/CMakeFiles/progress.marks
                $(MAKE) -f CMakeFiles/Makefile2 all
                $(CMAKE_COMMAND) -E cmake_progress_start /home/mikewrock/Desktop/h3d/libnifalcon-1.0.1/linux/CMakeFiles 0
            .PHONY : all

            # The main clean target
            clean:
                $(MAKE) -f CMakeFiles/Makefile2 clean
            .PHONY : clean

            # The main clean target
            clean/fast: clean
            .PHONY : clean/fast

            # Prepare targets for installation.
            preinstall: all
                $(MAKE) -f CMakeFiles/Makefile2 preinstall
            .PHONY : preinstall

            # Prepare targets for installation.
            preinstall/fast:
                $(MAKE) -f CMakeFiles/Makefile2 preinstall
            .PHONY : preinstall/fast

            # clear depends
            depend:
                $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
            .PHONY : depend

            #=============================================================================
            # Target rules for targets named nifalcon_DEPEND

            # Build rule for target.
            nifalcon_DEPEND: cmake_check_build_system
                $(MAKE) -f CMakeFiles/Makefile2 nifalcon_DEPEND
            .PHONY : nifalcon_DEPEND

            # fast build rule for target.
            nifalcon_DEPEND/fast:
                $(MAKE) -f src/CMakeFiles/nifalcon_DEPEND.dir/build.make src/CMakeFiles/nifalcon_DEPEND.dir/build
            .PHONY : nifalcon_DEPEND/fast

            #=============================================================================
            # Target rules for targets named nifalcon_SHARED

            # Build rule for target.
            nifalcon_SHARED: cmake_check_build_system
                $(MAKE) -f CMakeFiles/Makefile2 nifalcon_SHARED
            .PHONY : nifalcon_SHARED

            # fast build rule for target.
            nifalcon_SHARED/fast:
                $(MAKE) -f src/CMakeFiles/nifalcon_SHARED.dir/build.make src/CMakeFiles/nifalcon_SHARED.dir/build
            .PHONY : nifalcon_SHARED/fast

            #=============================================================================
            # Target rules for targets named nifalcon_STATIC

            # Build rule for target.
            nifalcon_STATIC: cmake_check_build_system
                $(MAKE) -f CMakeFiles/Makefile2 nifalcon_STATIC
            .PHONY : nifalcon_STATIC

            # fast build rule for target.
            nifalcon_STATIC/fast:
                $(MAKE) -f src/CMakeFiles/nifalcon_STATIC.dir/build.make src/CMakeFiles/nifalcon_STATIC.dir/build
            .PHONY : nifalcon_STATIC/fast

            #=============================================================================
            # Target rules for targets named nifalcon_cli_base_DEPEND

            # Build rule for target.
            nifalcon_cli_base_DEPEND: cmake_check_build_system
                $(MAKE) -f CMakeFiles/Makefile2 nifalcon_cli_base_DEPEND
            .PHONY : nifalcon_cli_base_DEPEND

            # fast build rule for target.
            nifalcon_cli_base_DEPEND/fast:
                $(MAKE) -f src/util/CMakeFiles/nifalcon_cli_base_DEPEND.dir/build.make src/util/CMakeFiles/nifalcon_cli_base_DEPEND.dir/build
            .PHONY : nifalcon_cli_base_DEPEND/fast

            #=============================================================================
            # Target rules for targets named nifalcon_cli_base_SHARED

            # Build rule for target.
            nifalcon_cli_base_SHARED: cmake_check_build_system
                $(MAKE) -f CMakeFiles/Makefile2 nifalcon_cli_base_SHARED
            .PHONY : nifalcon_cli_base_SHARED

            # fast build rule for target.
            nifalcon_cli_base_SHARED/fast:
                $(MAKE) -f src/util/CMakeFiles/nifalcon_cli_base_SHARED.dir/build.make src/util/CMakeFiles/nifalcon_cli_base_SHARED.dir/build
            .PHONY : nifalcon_cli_base_SHARED/fast

            #=============================================================================
            # Target rules for targets named nifalcon_cli_base_STATIC

            # Build rule for target.
            nifalcon_cli_base_STATIC: cmake_check_build_system
                $(MAKE) -f CMakeFiles/Makefile2 nifalcon_cli_base_STATIC
            .PHONY : nifalcon_cli_base_STATIC

            # fast build rule for target.
            nifalcon_cli_base_STATIC/fast:
                $(MAKE) -f src/util/CMakeFiles/nifalcon_cli_base_STATIC.dir/build.make src/util/CMakeFiles/nifalcon_cli_base_STATIC.dir/build
            .PHONY : nifalcon_cli_base_STATIC/fast

            #=============================================================================
            # Target rules for targets named nifalcon_device_boost_thread_DEPEND

            # Build rule for target.
            nifalcon_device_boost_thread_DEPEND: cmake_check_build_system
                $(MAKE) -f CMakeFiles/Makefile2 nifalcon_device_boost_thread_DEPEND
            .PHONY : nifalcon_device_boost_thread_DEPEND

            # fast build rule for target.
            nifalcon_device_boost_thread_DEPEND/fast:
                $(MAKE) -f src/util/CMakeFiles/nifalcon_device_boost_thread_DEPEND.dir/build.make src/util/CMakeFiles/nifalcon_device_boost_thread_DEPEND.dir/build
            .PHONY : nifalcon_device_boost_thread_DEPEND/fast

            #=============================================================================
            # Target rules for targets named nifalcon_device_boost_thread_SHARED

            # Build rule for target.
            nifalcon_device_boost_thread_SHARED: cmake_check_build_system
                $(MAKE) -f CMakeFiles/Makefile2 nifalcon_device_boost_thread_SHARED
            .PHONY : nifalcon_device_boost_thread_SHARED

            # fast build rule for target.
            nifalcon_device_boost_thread_SHARED/fast:
                $(MAKE) -f src/util/CMakeFiles/nifalcon_device_boost_thread_SHARED.dir/build.make src/util/CMakeFiles/nifalcon_device_boost_thread_SHARED.dir/build
            .PHONY : nifalcon_device_boost_thread_SHARED/fast

            #=============================================================================
            # Target rules for targets named nifalcon_device_boost_thread_STATIC

            # Build rule for target.
            nifalcon_device_boost_thread_STATIC: cmake_check_build_system
                $(MAKE) -f CMakeFiles/Makefile2 nifalcon_device_boost_thread_STATIC
            .PHONY : nifalcon_device_boost_thread_STATIC

            # fast build rule for target.
            nifalcon_device_boost_thread_STATIC/fast:
                $(MAKE) -f src/util/CMakeFiles/nifalcon_device_boost_thread_STATIC.dir/build.make src/util/CMakeFiles/nifalcon_device_boost_thread_STATIC.dir/build
            .PHONY : nifalcon_device_boost_thread_STATIC/fast

            #=============================================================================
            # Target rules for targets named barrow_mechanics

            # Build rule for target.
            barrow_mechanics: cmake_check_build_system
                $(MAKE) -f CMakeFiles/Makefile2 barrow_mechanics
            .PHONY : barrow_mechanics

            # fast build rule for target.
            barrow_mechanics/fast:
                $(MAKE) -f examples/CMakeFiles/barrow_mechanics.dir/build.make examples/CMakeFiles/barrow_mechanics.dir/build
            .PHONY : barrow_mechanics/fast

            #=============================================================================
            # Target rules for targets named falcon_led

            # Build rule for target.
            falcon_led: cmake_check_build_system
                $(MAKE) -f CMakeFiles/Makefile2 falcon_led
            .PHONY : falcon_led

            # fast build rule for target.
            falcon_led/fast:
                $(MAKE) -f examples/CMakeFiles/falcon_led.dir/build.make examples/CMakeFiles/falcon_led.dir/build
            .PHONY : falcon_led/fast

            #=============================================================================
            # Target rules for targets named falcon_test_cli

            # Build rule for target.
            falcon_test_cli: cmake_check_build_system
                $(MAKE) -f CMakeFiles/Makefile2 falcon_test_cli
            .PHONY : falcon_test_cli

            # fast build rule for target.
            falcon_test_cli/fast:
                $(MAKE) -f examples/CMakeFiles/falcon_test_cli.dir/build.make examples/CMakeFiles/falcon_test_cli.dir/build
            .PHONY : falcon_test_cli/fast

            #=============================================================================
            # Target rules for targets named findfalcons

            # Build rule for target.
            findfalcons: cmake_check_build_system
                $(MAKE) -f CMakeFiles/Makefile2 findfalcons
            .PHONY : findfalcons

            # fast build rule for target.
            findfalcons/fast:
                $(MAKE) -f examples/CMakeFiles/findfalcons.dir/build.make examples/CMakeFiles/findfalcons.dir/build
            .PHONY : findfalcons/fast

            #=============================================================================
            # Target rules for targets named findfalcons_multi

            # Build rule for target.
            findfalcons_multi: cmake_check_build_system
                $(MAKE) -f CMakeFiles/Makefile2 findfalcons_multi
            .PHONY : findfalcons_multi

            # fast build rule for target.
            findfalcons_multi/fast:
                $(MAKE) -f examples/CMakeFiles/findfalcons_multi.dir/build.make examples/CMakeFiles/findfalcons_multi.dir/build
            .PHONY : findfalcons_multi/fast

            # Help Target
            help:
                @echo "The following are some of the valid targets for this Makefile:"
                @echo "... all (the default if no target is provided)"
                @echo "... clean"
                @echo "... depend"
                @echo "... edit_cache"
                @echo "... install"
                @echo "... install/local"
                @echo "... install/strip"
                @echo "... list_install_components"
                @echo "... rebuild_cache"
                @echo "... nifalcon_DEPEND"
                @echo "... nifalcon_SHARED"
                @echo "... nifalcon_STATIC"
                @echo "... nifalcon_cli_base_DEPEND"
                @echo "... nifalcon_cli_base_SHARED"
                @echo "... nifalcon_cli_base_STATIC"
                @echo "... nifalcon_device_boost_thread_DEPEND"
                @echo "... nifalcon_device_boost_thread_SHARED"
                @echo "... nifalcon_device_boost_thread_STATIC"
                @echo "... barrow_mechanics"
                @echo "... falcon_led"
                @echo "... falcon_test_cli"
                @echo "... findfalcons"
                @echo "... findfalcons_multi"
            .PHONY : help



            #=============================================================================
            # Special targets to cleanup operation of make.

            # Special rule to run CMake to check the build system integrity.
            # No rule that depends on this can have commands that come from listfiles
            # because they might be regenerated.
            cmake_check_build_system:
                $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
            .PHONY : cmake_check_build_system

Thanks for your help -Michael

EDIT: As recommended, I've tried modifying CMakeLists.txt instead of the makefiles it generates. I'm still having the same issue, so here is the CMakeLists.txt:

            ######################################################################################
            # CMake directives
            ######################################################################################

            #Require 2.6 or higher. 
            CMAKE_MINIMUM_REQUIRED(VERSION 2.6.0 FATAL_ERROR)

            #See if we've got our cmake modules checked out. If not, advise to do so.
            IF(EXISTS "${CMAKE_SOURCE_DIR}/../compily_buildd/cmake")
              SET(BUILDSYS_CMAKE_DIR "${CMAKE_SOURCE_DIR}/../compily_buildd/cmake")
              MESSAGE(STATUS "Using outside compily_buildd directory ${BUILDSYS_CMAKE_DIR}")
            ELSEIF(EXISTS "${CMAKE_SOURCE_DIR}/compily_buildd/cmake")
              SET(BUILDSYS_CMAKE_DIR "${CMAKE_SOURCE_DIR}/compily_buildd/cmake")
              MESSAGE(STATUS "Using compily_buildd git submodule ${BUILDSYS_CMAKE_DIR}")
            ELSE(EXISTS "${CMAKE_SOURCE_DIR}/compily_buildd/cmake")
              MESSAGE(FATAL_ERROR 
                "Cannot find compily_buildd directory for np labs project compilation functions.\n"
                "Make sure you've either put the compily_buildd directory in the same root as your repository directory, or that you've used the compily_buildd submodule (git submodule update --init).\n"
                "NP Labs build repository is available at git://github.com/qdot/compily_buildd.git"
                )
            ENDIF(EXISTS "${CMAKE_SOURCE_DIR}/../compily_buildd/cmake")

            LIST(APPEND CMAKE_MODULE_PATH ${BUILDSYS_CMAKE_DIR})

            INCLUDE( ${BUILDSYS_CMAKE_DIR}/BuildSysCMakeLib.cmake )

            #setting link directory policy

            IF(COMMAND cmake_policy)
              CMAKE_POLICY(SET CMP0003 NEW)
            ENDIF(COMMAND cmake_policy)

            ######################################################################################
            # Project declaration and options
            ######################################################################################

            #Project declaration

            PROJECT(LIBNIFALCON)
            set(CMAKE_C_COMPILER "gcc")
            set(CMAKE_CXX_COMPILER "g++")
            set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC"  )
            INITIALIZE_BUILD()

            #Common Options

            OPTION_LIBRARY_BUILD_STATIC(ON)
            #We can't build shared on MSVC yet
            IF(NOT MSVC)
              OPTION_LIBRARY_BUILD_SHARED(ON)
            ENDIF(NOT MSVC)
            OPTION_FAST_MATH(ON)
            OPTION_ARCH_OPTS(ON)
            OPTION_GPROF(OFF)
            #OPTION_LOG4CXX(OFF LIBNIFALCON_REQ_LIBS)
            #OPTION_CREATE_VERSION_FILE(ON "${CMAKE_CURRENT_SOURCE_DIR}/src/version.cc")

            #Project specific options

            OPTION(FORCE_FTD2XX_BUILD "Force building FTD2XX libraries on non-windows platforms" OFF)
            OPTION(STATIC_LINK_SUFFIXES "Add a symbolic link with [library_name]_s on static libraries (for ease in building staticly linked binaries under gcc)" OFF)
            OPTION(BUILD_SWIG_BINDINGS "Build Java/Python bindings for libnifalcon" OFF)
            OPTION(BUILD_EXAMPLES "Build libnifalcon examples" ON)

            ######################################################################################
            # Project specific package finding
            ######################################################################################

            #Find communications libraries
            IF(WIN32 OR FORCE_FTD2XX_BUILD)
              FIND_PACKAGE(libftd2xx)
              IF(LIBFTD2XX_FOUND)
                INCLUDE_DIRECTORIES(${LIBFTD2XX_INCLUDE_DIRS})
                SET(LIBNIFALCON_REQ_LIBS ${LIBFTD2XX_LIBRARIES})
              ENDIF(LIBFTD2XX_FOUND)
            ENDIF(WIN32 OR FORCE_FTD2XX_BUILD)

            IF(NOT LIBFTD2XX_FOUND)
              FIND_PACKAGE(libusb-1.0)
              IF(LIBUSB_1_FOUND)
                INCLUDE_DIRECTORIES(${LIBUSB_1_INCLUDE_DIRS})
                SET(LIBNIFALCON_REQ_LIBS ${LIBUSB_1_LIBRARIES})
              ENDIF(LIBUSB_1_FOUND)
            ENDIF(NOT LIBFTD2XX_FOUND)

            IF(NOT LIBFTD2XX_FOUND AND NOT LIBUSB_1_FOUND)
              MESSAGE(FATAL_ERROR "Either ftd2xx or libusb-1.0 is required to build libnifalcon. Check the README file for info.")
            ENDIF(NOT LIBFTD2XX_FOUND AND NOT LIBUSB_1_FOUND)

            #Find boost, used all over the place
            SET(Boost_USE_MULTITHREADED ON)
            SET(Boost_USE_STATIC_LIBS ON)

            FIND_PACKAGE(Boost REQUIRED)
            IF(NOT Boost_FOUND)
              MESSAGE(FATAL_ERROR "libnifalcon requires a minimum of the Boost 1.33 headers to build")
            ENDIF(NOT Boost_FOUND)

            FIND_PACKAGE(Boost COMPONENTS program_options thread)

            ######################################################################################
            # Project specific globals
            ######################################################################################

            #library definitions

            SET(LIBNIFALCON_MAJOR_VERSION 1)
            SET(LIBNIFALCON_MINOR_VERSION 0)
            SET(LIBNIFALCON_BUILD_VERSION 1)

            # BUILDSYS_CPACK_INFO(
            #   NAME "libnifalcon"
            #   MAJOR_VERSION ${LIBNIFALCON_MAJOR_VERSION}
            #   MINOR_VERSION ${LIBNIFALCON_MINOR_VERSION}
            #   BUILD_VERSION ${LIBNIFALCON_BUILD_VERSION}
            #   VENDOR "Nonpolynomial Labs"
            #   DESCRIPTION "Open Source Driver for the Novint Falcon Haptic Controller"
            #   )
            # INCLUDE(CPack)

            SET(LIBNIFALCON_VERSION ${LIBNIFALCON_MAJOR_VERSION}.${LIBNIFALCON_MINOR_VERSION}.${LIBNIFALCON_BUILD_VERSION})

            #library name definitions

            CREATE_LIBRARY_LINK_NAME(nifalcon)
            CREATE_LIBRARY_LINK_NAME(nifalcon_cli_base)
            CREATE_LIBRARY_LINK_NAME(nifalcon_device_boost_thread)

            SET(LIBNIFALCON_INCLUDE_DIR "${CMAKE_SOURCE_DIR}/include")

            INCLUDE_DIRECTORIES(${LIBNIFALCON_INCLUDE_DIR} ${Boost_INCLUDE_DIRS})
            LINK_DIRECTORIES(${LIBRARY_OUTPUT_PATH})

            #If we build libusb staticly on apple, we need the proper frameworks
            IF(BUILD_STATIC AND APPLE)
              LIST(APPEND LIBNIFALCON_EXE_LINK_LIBS "-framework IOKit" "-framework CoreFoundation")
            ENDIF(BUILD_STATIC AND APPLE)

            LIST(APPEND LIBNIFALCON_EXE_LINK_LIBS 
              ${libnifalcon_LIBRARY}
              ${LIBNIFALCON_REQ_LIBS}
              )

            ADD_SUBDIRECTORY(include)
            ADD_SUBDIRECTORY(src)
            IF(BUILD_EXAMPLES)
              ADD_SUBDIRECTORY(examples)
            ENDIF(BUILD_EXAMPLES)
            IF(BUILD_SWIG_BINDINGS)
              ADD_SUBDIRECTORY(lang/swig)
            ENDIF(BUILD_SWIG_BINDINGS)

            # pkg-config (use the CPack information)
            # FIND_PACKAGE(PkgConfig)
            # if(PKG_CONFIG_EXECUTABLE)
            #   set(PC_SHORT_NAME "${BUILDSYS_CPACK_NAME}")
            #   set(PC_LONG_NAME "${BUILDSYS_CPACK_NAME}")
            #   set(PC_LIBRARY_NAME "${LIBNIFALCON_CPP}")
            #   set(PC_DESCRIPTION "${CPACK_PACKAGE_DESCRIPTION_SUMMARY}")
            #   set(PC_VERSION "${LIBNIFALCON_MAJOR_VERSION}.${LIBNIFALCON_MINOR_VERSION}.${LIBNIFALCON_BUILD_VERSION}")

            #   if(LIBUSB_1_FOUND)
            #     set(PC_REQUIRES "${PC_REQUIRES}libusb-1.0 ")
            #     set(PC_LINK_FLAGS "${PC_LINK_FLAGS}-lnifalcon_comm_libusb ")
            #   endif(LIBUSB_1_FOUND)

            #   set(PC_LINK_FLAGS "${lib${PC_LIBRARY_NAME}_LINK_FLAGS} ${PC_LINK_FLAGS}")
            #   set(PC_LINK_FLAGS "-l${PC_LIBRARY_NAME} ${PC_LINK_FLAGS}")
            #   set(PC_COMPILE_FLAGS "${lib${PC_LIBRARY_NAME}_COMPILE_FLAGS}")
            #   set(PC_CONFIGURED_FILE
            #     ${CMAKE_BINARY_DIR}/libnifalcon.pc
            #     )
            #   MESSAGE("-- Generating ${PC_CONFIGURED_FILE}")
            #   configure_file(
            #     ${CMAKE_SOURCE_DIR}/libnifalcon.pc.cmake
            #     ${PC_CONFIGURED_FILE}
            #     @ONLY
            #     )
            #   set(PKG_CONFIG_DIR "${CMAKE_INSTALL_PREFIX}/lib/pkgconfig")
            #   install(FILES ${PC_CONFIGURED_FILE} DESTINATION ${PKG_CONFIG_DIR})
            # endif(PKG_CONFIG_EXECUTABLE)

解决方案

You can add the following to the Makefile.

CFLAGS += -fPIC
CPPFLAGS += -fPIC

But, really, you should be modifying the code for cmake, and then regenerate the Makefile. There should be a way to add to CFLAGS in cmake.

EDIT: Seems like you can set the cmake variables CMAKE_C_FLAGS and CMAKE_CXX_FLAGS in the cmake input file.

这篇关于编辑CMakeLists.txt以使用-fPIC编译的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆