-
Notifications
You must be signed in to change notification settings - Fork 165
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[WIP] cmake 対応の実験 (part2) 更新版 #378
[WIP] cmake 対応の実験 (part2) 更新版 #378
Conversation
こんな感じのバッチファイルで MingW64 でRelease/Debug でビルド、(Debug 版は)実行できた。
|
https://stackoverflow.com/questions/19450722/include-mingw-libraries-in-compiled-file 以下でいけるのかも
|
GCCランタイムライブラリに関する例外 |
たぶん2段階になっていて、gccのランタイムの他にpthreadを考慮しないといかんはずです。
大昔「GPL汚染」と忌避されていたgccの呪縛・・・。 |
|
||
# fix the error 'Missing variable is: CMAKE_RC_CREATE_SHARED_LIBRARY' | ||
# https://cmake.org/pipermail/cmake/2012-January/048647.html | ||
set_target_properties(${project_name} PROPERTIES LINKER_LANGUAGE "CXX" ) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ぼくローカルでやってるとき、
生成されるDLLが libsakura_lang_en_US.dll
になっちゃって対処方法が不明でした。
リンカ言語をC++にしてるってことは、変更前はC言語なんですかね?う~む。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
生成されるDLLが libsakura_lang_en_US.dll になっちゃう問題は解決されない、ということを確認。
lib~という名前を作ってるのは cmake.exe のバイナリ内である模様・・・。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
課題はたくさんありますが、ちょっとずつ解決しているような気がします。
sakura_lang_en_US/CMakeLists.txt
Outdated
#endforeach( srcTemp ${SOURCE_FILES}) | ||
|
||
# define sources files of an executable | ||
add_library(${project_name} SHARED ${SOURCE_FILES} ${HEADER_FILES} ${RESOURCE_FILES}) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ここたぶん、こうです。
# define project as a DLL
add_library(${project_name} MODULE ${SOURCE_FILES} ${HEADER_FILES} ${RESOURCE_FILES})
SHARED → MODULE ね。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
d617a48 で対応しました。
|
||
# fix the error 'Missing variable is: CMAKE_RC_CREATE_SHARED_LIBRARY' | ||
# https://cmake.org/pipermail/cmake/2012-January/048647.html | ||
set_target_properties(${project_name} PROPERTIES LINKER_LANGUAGE "CXX" ) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
MinGW向けを libsakura_lang_en_US.dll
にしないためには PREFIX をブランクにすればいいようです。
ここのプロパティ定義と統合してこんな感じにしてうまく行きました。
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
set_target_properties(${project_name}
PROPERTIES
PREFIX ""
LINKER_LANGUAGE "CXX"
)
endif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
05d7189 で対応しました。
(ソースコード上で DLL 名に期待するものが決まっているので) コンパイラ環境に
関係なく PREFIX を空にしました。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
(ソースコード上で DLL 名に期待するものが決まっているので) コンパイラ環境に
関係なく PREFIX を空にしました。
この対応は問題みたいでした。VS ではコンパイル通りませんでした。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
set (CMAKE_SHARED_LIBRARY_PREFIX # remove "lib" prefix on MinGW build.
""
)
で lib プリフィックスが消えます。VC 環境ではもともと空なので条件判断は不要です。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
たぶんCMAKE_SHARED_LIBRARY_PREFIX
使ったほうがスマートですね。
解決。
ldのオプション if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
set_target_properties(${project_name}
PROPERTIES
LINK_FLAGS "-static -mwindows"
)
endif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") これで編集ウインドウの表示を確認しました。 |
なんてこった。 前提条件
vs2017で CMakeLists.txt のあるフォルダを開いて「Change CMake Settings」を選び、 現状では CMakeLists.txt で MinGW ビルドができないので、まずそこをクリアしないとです。 |
以下バッチファイルで
|
appveyor こけている。 |
バイナリサイズ肥大化はうちでも確認しました。 vs2017->gdb連携はうまくいっていないです。 |
そういえば、cmakeのprojectですが、オプションで言語を指定できるようです。 project (SakuraEditor LANGUAGES CXX) こんな感じに言語をC++に固定してみたらcacheを作る時間が若干短縮されました。 |
デバッグ版のリンカオプションに -s を付けてストリップしてみました。 4,058,112 sakura.exe これだとデバッグできませんが、vcのrelease版とあまり変わらないサイズになっています。 |
測定してみましたが、特に変わらないように思います。 |
全部の project に LANGUAGES を指定したんですね。 |
ae67669
to
28b4087
Compare
1886ceb
to
ad23def
Compare
ad23def
to
18e417e
Compare
13f6823
to
88e9121
Compare
このPRの賞味期限は切れてると思いますがどうでしょう? |
閉じました |
#46 で cmake の実験を行ってからいっぱい更新があったので実験ブランチを最新に更新
#349 (comment) で #46 に関する言及があったので情報共有のためにあげておく。