1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

VisualStudio2019 で cmake と googletest

Posted at

VisualStudio 2019 で cmake との親和性が高くなったらしいが、端々で躓く。今後参考になりそうな箇所メモ残す。

gtest.lib gtestd.lib gtest_main.lib gtest_maind.lib あたりが見つからない

LNK1104 のエラーは原因が多くてなかなか正解にたどり着けない。
VSのテンプレートに任せて「Google Test」でプロジェクトを作ったりすると、元のフォルダパスが少々長いと簡単に gtest.lib へのパスが深くなってしまう。
https://docs.microsoft.com/ja-jp/cpp/error-messages/tool-errors/linker-tools-error-lnk1104?view=vs-2019#paths-that-are-too-long
260文字以内に抑えるためにプロジェクトパスを短くする必要がある。

googletest は cmake に任せたい

Google Test勉強録 (1) CMakeでのビルド 参考にするのがしっくり来た。

Runtime 不一致エラー

マルチスレッドとかマルチスレッドDLLとかそういうあたりなんだけど、これも cmake で解決したほうがいい。
CMakeでCRTライブラリを静的リンクするVisual Studioプロジェクトを出力する
上のと合わせると、ルートの CMakelists.txtは、

cmake_minimum_required (VERSION 3.8)

project ("sample_project")
if(MSVC)
    string(REPLACE "/MD" "/MT" CMAKE_C_FLAGS_DEBUG            ${CMAKE_C_FLAGS_DEBUG})
    string(REPLACE "/MD" "/MT" CMAKE_C_FLAGS_MINSIZEREL       ${CMAKE_C_FLAGS_MINSIZEREL})
    string(REPLACE "/MD" "/MT" CMAKE_C_FLAGS_RELEASE          ${CMAKE_C_FLAGS_RELEASE})
    string(REPLACE "/MD" "/MT" CMAKE_C_FLAGS_RELWITHDEBINFO   ${CMAKE_C_FLAGS_RELWITHDEBINFO})
    string(REPLACE "/MD" "/MT" CMAKE_CXX_FLAGS_DEBUG          ${CMAKE_CXX_FLAGS_DEBUG})
    string(REPLACE "/MD" "/MT" CMAKE_CXX_FLAGS_MINSIZEREL     ${CMAKE_CXX_FLAGS_MINSIZEREL})
    string(REPLACE "/MD" "/MT" CMAKE_CXX_FLAGS_RELEASE        ${CMAKE_CXX_FLAGS_RELEASE})
    string(REPLACE "/MD" "/MT" CMAKE_CXX_FLAGS_RELWITHDEBINFO ${CMAKE_CXX_FLAGS_RELWITHDEBINFO})
endif(MSVC)

enable_testing()
add_subdirectory(src)
add_subdirectory(test)

な感じになる。

ひとまず今んとこ以上

1
4
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?