2016-11-25 31 views
3

私はIntel C++ Compiler,CMake、およびstd::threadsをサポートする簡単なテストプロジェクトをコンパイルしようとしています。cmake、icc、pthreadsとリンクする(Linux)

私が行う場合:次に

icpc -std=c++11 -lpthread source/main.cpp 

ビルドとプログラムの作業罰金。

しかしCMakeと、私はエラーを取得:

CMake Error at CMakeLists.txt:21 (TARGET_LINK_LIBRARIES): 
    Cannot specify link libraries for target "test" which is not built by 
    this project. 

CMakeLists.txtは次のとおりです。と呼ばれ、私はicccompilervars.sh)とCMakeによって提供されるスクリプトによって設定された環境で構築しています

project(test) 
set (CMAKE_CXX_FLAGS "-std=c++11") 
set(SOURCE_LIST "source/main.cpp") 
TARGET_LINK_LIBRARIES(${PROJECT_NAME} pthread) 
add_executable (${PROJECT_NAME} ${SOURCE_LIST}) 

-DCMAKE_C_COMPILER=icc -DCMAKE_CXX_COMPILER=icpcオプション私はスレッドを使用していない場合に動作します。

CMakeの私の使用にはどのような問題がありますか?

ありがとうございます!

+1

私はあなたが最初に持っていると思います実行可能ファイルを宣言し、リンクライブラリを設定します。そうでなければ、 'target_link_libraries'は実行可能ファイル(あなたの場合は' test')と苦情を知りません。 –

答えて

2

target_link_libraries、タールのドキュメントを見る使用されて前を宣言する必要があります:

The named <target> must have been created in the current directory by a command such as add_executable() or add_library() .

this answerに記載されているようにところで、あなたは明示的CMAKE_CXX_FLAGSを設定し、CMAKE_CXX_STANDARDと関連する変数を設定することを好むべきではありません。

project(test) 

set(CMAKE_CXX_STANDARD 11) 
set(CMAKE_CXX_STANDARD_REQUIRED ON) 
set(CMAKE_CXX_EXTENSIONS OFF) 

set(SOURCE_LIST "source/main.cpp") 

add_executable(${PROJECT_NAME} ${SOURCE_LIST}) 

target_link_libraries(${PROJECT_NAME} pthread) 
+0

ありがとうございます。 CMAKE_CXX_STANDARDフラグは、インテル®コンパイラー3.5以降で動作しません。また、CMakeを使用しているディストリビューションでは、3.5.1 – galinette

2

順序が間違っている:最初に、あなたの実行可能ファイルを宣言し、CMakeのは、それが

add_executable (${PROJECT_NAME} ${SOURCE_LIST}) 

が存在することを知っているし、その後target_link_librariesのドキュメントから

TARGET_LINK_LIBRARIES(${PROJECT_NAME} pthread) 

リンクライブラリを追加してみましょう:

The named must have been created in the current directory by a command such as add_executable() or add_library()

関連する問題