現在、Windowsにcmake、clang、ninjaをインストールしています。 CMakeを使用して忍者ビルドファイルを生成し、非常に単純なhelloworldプログラムをコンパイルしようとしています。
私のCMakeLists.txtは次のようになります。
cmake_minimum_required(VERSION 2.8)
project(test_project)
add_executable(main main.cpp)
main.cpp
は単純なHelloWorldプログラムです。
コマンドラインでこれを実行します:cmake -G Ninja ..
そして次のエラーが発生します:
-- The C compiler identification is Clang 3.5.0
clang.exe: error: no such file or directory: '/nologo'
clang.exe: error: no such file or directory: '/showIncludes'
-- The CXX compiler identification is Clang 3.5.0
clang.exe: error: no such file or directory: '/nologo'
clang.exe: error: no such file or directory: '/showIncludes'
-- Check for working C compiler using: Ninja
-- Check for working C compiler using: Ninja -- broken
CMake Error at C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/CMakeTestCCompiler.cmake:61 (message):
The C compiler "C:/llvm_build/RelWithDebInfo/bin/clang.exe" is
not able to compile a simple test program.
It fails with the following output:
Change Dir: C:/test_proj/build/CMakeFiles/CMakeTmp
Run Build Command:C:/ninja/ninja.exe cmTryCompileExec375034429
[1/2] Building C object
CMakeFiles\cmTryCompileExec375034429.dir\testCCompiler.c.obj
[2/2] Linking C executable cmTryCompileExec375034429.exe
FAILED: cmd.exe /c cd . &&
C:\llvm_build\RelWithDebInfo\bin\clang.exe
CMakeFiles\cmTryCompileExec375034429.dir\testCCompiler.c.obj -o
cmTryCompileExec375034429.exe && cd .
clang.exe: error: unable to execute command: program not executable
clang.exe: error: linker command failed with exit code 1 (use -v to see
invocation)
ninja: build stopped: subcommand failed.
CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
CMakeLists.txt:2 (project)
-- Configuring incomplete, errors occurred!
See also "C:/test_proj/build/CMakeFiles/CMakeOutput.log".
See also "C:/test_proj/build/CMakeFiles/CMakeError.log".
CMakeError.log
ファイルは次のようになります。
Compiling the C compiler identification source file "CMakeCCompilerId.c" failed.
Compiler: C:/llvm_build/RelWithDebInfo/bin/clang.exe
Build flags:
Id flags:
The output was:
1
clang.exe: error: unable to execute command: program not executable
clang.exe: error: linker command failed with exit code 1 (use -v to see invocation)
Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" failed.
Compiler: C:/llvm_build/RelWithDebInfo/bin/clang++.exe
Build flags:
Id flags:
The output was:
1
clang++.exe: error: unable to execute command: program not executable
clang++.exe: error: linker command failed with exit code 1 (use -v to see invocation)
Determining if the C compiler works failed with the following output:
Change Dir: C:/test_proj/build/CMakeFiles/CMakeTmp
Run Build Command:C:/ninja/ninja.exe cmTryCompileExec2120850158
[1/2] Building C object CMakeFiles\cmTryCompileExec2120850158.dir\testCCompiler.c.obj
[2/2] Linking C executable cmTryCompileExec2120850158.exe
FAILED: cmd.exe /c cd . && C:\llvm_build\RelWithDebInfo\bin\clang.exe CMakeFiles\cmTryCompileExec2120850158.dir\testCCompiler.c.obj -o cmTryCompileExec2120850158.exe && cd .
clang.exe: error: unable to execute command: program not executable
clang.exe: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.
CmakeがWindowsオプション/nologo
および/showIncludes
を使用してclangをテストしようとしているようです。 cmakeに適切な引数を渡すように指示する方法がわかりません。
FWIW私は64ビットのWindows7を実行しています
編集:
そこで、組み込みのcmakeファイルを調べたところ、CMakeClDeps.cmake
ファイルが/nologo /showIncludes
オプションを追加した原因であることがわかりました。 Clangをコンパイラーとして設定すると、cmakeはビジュアルスタジオがコンパイラーであると見なすようです(MSVC_C_ARCHITECTURE_IDをx86に設定します)。
CMakeDetermineCompilerId.cmake
を設定するMSVC_C_ARCHITECTURE_ID
の行を削除しましたが、再試行した後、次のエラーが発生します。
-- The C compiler identification is Clang 3.5.0
-- The CXX compiler identification is Clang 3.5.0
-- Check for working C compiler using: Ninja
-- Check for working C compiler using: Ninja -- broken
CMake Error at C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/CMakeTestCCompiler.cmake:61 (message):
The C compiler "C:/llvm_build/RelWithDebInfo/bin/clang.exe" is
not able to compile a simple test program.
It fails with the following output:
Change Dir: C:/test_proj/build/CMakeFiles/CMakeTmp
Run Build Command:C:/ninja/ninja.exe cmTryCompileExec2815594422
[1/2] Building C object
CMakeFiles\cmTryCompileExec2815594422.dir\testCCompiler.c.obj
[2/2] Linking C executable cmTryCompileExec2815594422.exe
FAILED: cmd.exe /c cd . &&
C:\llvm_build\RelWithDebInfo\bin\clang.exe
CMakeFiles\cmTryCompileExec2815594422.dir\testCCompiler.c.obj -o
cmTryCompileExec2815594422.exe && cd .
clang.exe: error: unable to execute command: program not executable
clang.exe: error: linker command failed with exit code 1 (use -v to see
invocation)
ninja: build stopped: subcommand failed.
CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
CMakeLists.txt:2 (project)
-- Configuring incomplete, errors occurred!
See also "C:/test_proj/build/CMakeFiles/CMakeOutput.log".
See also "C:/test_proj/build/CMakeFiles/CMakeError.log".
それが役立つかどうかはわかりませんが、同じエラーが発生しました。これで、Windowsでclang(3.7.1)/ ninja(1.6)/ cmake(3.4.1)を使用してコンパイルし、ビルドディレクトリで次のアクションを実行できます。
"<Your Visual Studio location>\VC\vcvarsall.bat" x86
)clang-cl
に設定します(clang
とclang++
の代わりに)cmake -G Ninja <project>
を実行しますcmake --build .
を実行します私が受け取ったエラーの2番目のセットは、clangがリンカーを見つけられなかったためでした。 Visual Studioを使用してclangを構築しましたが、当時はVisualStudioリンカーが見つかりませんでした。私がしなければならなかったのは、ビジュアルスタジオ開発コンソールでそれを実行することだけでした。
CMakeはまだclangがビジュアルスタジオコンパイラであると考えているので、_CMakeDetermineCompilerId.cmake
_ファイルには次のような行があります。
set(MSVC_${lang}_ARCHITECTURE_ID "${ARCHITECTURE_ID}")
このように変更しました
_if (COMPILER_ID MATCHES "MSVC")
set(MSVC_${lang}_ARCHITECTURE_ID "${ARCHITECTURE_ID}")
endif()
_
うまくいけば、これは他のCMake機能を壊さないでしょう。