我们正在使用CMake 3.6.2生成的makefile捕获Solaris上的链接错误。在下面的测试中,我们使用的是GCC,而不是SunCC。从它的外观来看,CMake不一致地应用我们的选项:
典型的编译命令
$.extend( wp.Uploader.prototype, {
init : function(){
console.log( 'uploader is initialised' );
$('.color-field').wpColorPicker(); // not sure exactly when it initialises ?
},
success : function(filename){
console.log( 'uploader has loaded: '+ filename );
$('.color-field').wpColorPicker(); // or you might want to add the colorbox once a file is actually uploaded?
},
});
缩位链接命令
[ 2%] Building CXX object CMakeFiles/cryptopp-object.dir/cpu.cpp.o
/bin/c++ -fPIC -march=native -m64 -Wa,--divide -o CMakeFiles/cryptopp-object.dir/cryptlib.cpp.o
-c /export/home/jwalton/cryptopp/cpu.cpp
典型链接错误
/bin/c++ CMakeFiles/cryptest.dir/bench1.cpp.o CMakeFiles/cryptest.dir/bench2.cpp.o
...
CMakeFiles/cryptest.dir/fipstest.cpp.o -o cryptest.exe libcryptopp.a -lnsl -lsocket
请注意,该文件是使用ld: fatal: file CMakeFiles/cryptopp-object.dir/cryptlib.cpp.o: wrong ELF class: ELFCLASS64
(它是一个支持64位的机器和内核)编译的,但缺少链接调用(Solaris上的默认值为32位)。
尝试搜索 "cmake use CXXFLAGS link" 会产生太多无关紧要的噪音,而且我找不到-march=native -m64
选项也没有太多运气。我还希望避免将工作重复到CMakeList.txt
,或执行重新格式化选项的工作(LDFLAGS
选项CXXFLAGS
变为-Wl,-x
选项LDFLAGS
)。< / p>
如何指示CMake在驾驶链接时同时使用CXX和CXXFLAGS?
我在CMake用户邮件列表上找到Running a different program for the linker,但对我来说感觉不对(问题和上下文略有不同)。它也不起作用。
这是一个小例子:
-x
我还在邮件列表中找到了Setting global link flags。它也不起作用。
PROJECT(foo)
SET(CMAKE_CXX_LINK_EXECUTABLE
"purify <CMAKE_CXX_COMPILER> <CMAKE_CXX_LINK_FLAGS> <LINK_FLAGS> <FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")
ADD_EXECUTABLE(foo foo.cxx)