2017-06-22 27 views
1

編譯罰款我編譯我的代碼,我在其中使用POSIX線程C.使用CMakeLists導致的錯誤,而在命令行

我使用的克利翁和其的CMakeLists.txt:

cmake_minimum_required(VERSION 3.7) 
project(Test) 

set(CMAKE_C_STANDARD 99) 
add_definitions(-lpthread) 

set(SOURCE_FILES main.c) 

add_executable(Test ${SOURCE_FILES}) 

我出現錯誤(例如:undefined reference to sem_init'`)。

提出的解決方案建議是添加-lpthread編譯器標誌,但我已經添加了它。

我從命令行編譯相同的代碼:

gcc main.c -lpthread 

它編譯沒有任何問題。

這可能是一個可能的問題/解決方案?

+0

[cmake和libpthread]的可能重複(https://stackoverflow.com/questions/1620918/cmake-and-libpthread) – Tsyvarev

回答

3

完全刪除add_definitions(-lpthread),因爲pthread不是定義,而是庫依賴關係。

添加後 add_executable()

target_link_libraries(Test pthread) 

另外,如果你想看到什麼命令CMake的使用無需審查其文件,你可以在命令行上cmake -DCMAKE_VERBOSE_MAKEFILE=ON ...使用它。

順便說一句,總是更喜歡所有的target_*命令,如target_compile_definitions()而不是舊的add_definitions()。這樣可以保持項目屬性和相關性清潔,並將不同目標之間的干擾降到最低。

如果在上述修改之後你的代碼仍然不能編譯,那麼很可能代碼本身是錯誤的(與CMake無關)。

相關問題