2016-03-24 16 views
1

リンカスクリプトが必要なCおよびASM(AT & T)ソースファイルのプロジェクトがあります。私CMakeLists.txtはこのようなものになります。CMakeを使用してリンカフラグを正しく設定する

cmake_minimum_required(VERSION 2.8.4) 
project(proj C ASM-ATT) 
file(GLOB SOURCE_FILES *.c *.S) 
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32 -Wall -g -fno-stack-protector -pedantic") 

add_executable(proj ${SOURCE_FILES}) 

set_target_properties(proj PROPERTIES LINK_FLAGS "-T${proj_SOURCE_DIR}/link.ld -melf_i386") 

不思議なことに、make VERBOSE=1を構築することは次のことを明らかに:

[ 14%] Linking C executable proj 
(...) 
/usr/bin/cc -m32 -Wall -g -fno-stack-protector -pedantic -T/path/to/link.ld -melf_i386 (all object files) 
cc: error: unrecognized command line option '-melf_i386' 

cmakeのは、Cのリンカーとして/usr/bin/cc使用しようとしているようです。私はこれに取り組んで、いくつかの異なるオプション(CMAKE_LINKERCMAKE_EXE_LINK_OPTIONSの設定を含む)を試しました。

CMakeCache.txt

CMAKE_LINKER:FILEPATH=/usr/bin/ld 

は、それは明らかにldを認識しており、単に実行ファイルをリンクするCコンパイラを使用していると言ってラインが含まれていることに注意してください。

ご協力いただければ幸いです!

答えて

2

CMakeは、デフォルトで、コンパイラの実行可能ファイルを通じて間接的にリンカを呼び出します。実行ファイルをリンクするためのテンプレートコマンドは、変数CMAKE_LANG_LINK_EXECUTABLEに設定されています。

、コンパイラ、リンカへのフラグを渡す必要がありLINK_FLAGSを設定すると-Wlを使用するには、すなわち:

set_target_properties(
    proj PROPERTIES LINK_FLAGS "-Wl,-T${proj_SOURCE_DIR}/link.ld,-melf_i386") 
関連する問題