我至少有三种方法可以做到这一点,我想知道哪种方式是惯用的.这几乎普遍适用于任何静态库.我很惊讶CMake中的Makefile生成器不会自动将其添加到静态库中.(除非我错过了什么?)
target_compile_options(myLib PRIVATE -fPIC)
add_compile_options(-fPIC)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fpic")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpic")
Run Code Online (Sandbox Code Playgroud)
我相信可能还有其他变化.(如果你找到一个,请编辑我的问题)
如果您碰巧知道这个问题的答案,您是否也知道是否有办法使用此标志编译第三方CMake项目而不修改其CMakeLists.txt文件?我遇到了缺少该标志的静态库.将静态库编译为动态库时会导致问题.
你得到:
relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
Run Code Online (Sandbox Code Playgroud) 我已经做了很多研究并且无法找到答案...我怎样才能可靠地找到我正在编译的目标架构,使用CMake?基本上,相当于qmake中的QMAKE_TARGET.arch.
大多数消息来源似乎建议使用CMAKE_SYSTEM_PROCESSOR,但这是一个糟糕的解决方案,因为无论你是在编译i386,x86_64,ppc还是ppc64,它都会在OS X上返回i386.
同样,CMAKE_SIZEOF_VOID_P给出的指针大小的系统,而不是目标.
我知道有CMAKE_OSX_ARCHITECTURES,但如果没有设置,这可能是空的,在这种情况下,它似乎默认为系统能够做的任何事情.那么如何找到目标架构信息呢?
特别是对于OS X,我如何区分32,64和Intel Universal?