リンカスクリプトが必要な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_LINKER
とCMAKE_EXE_LINK_OPTIONS
の設定を含む)を試しました。
もCMakeCache.txt
が
CMAKE_LINKER:FILEPATH=/usr/bin/ld
は、それは明らかにld
を認識しており、単に実行ファイルをリンクするCコンパイラを使用していると言ってラインが含まれていることに注意してください。
ご協力いただければ幸いです!