2017-03-11 34 views
2

當使用CMakeLists編譯一個OpenGL項目,我有以下行鏈接過剩和GL:如何知道CMakeLists的庫變量名?

target_link_libraries(my_exe ${OPENGL_gl_LIBRARY} ${GLUT_LIBRARIES}) 

我擡頭一看如何使用CMake的鏈接過剩和GL讓我看到了,我可以用$ {OPENGL_gl_LIBRARY }和$ {GLUT_LIBRARIES}。但是,我如何知道要使用的變量呢?我習慣於做$ {THELIBRARY_LIBRARES},但在gl的情況下,它更改爲將「gl」添加到變量名稱中。我怎麼知道,沒有谷歌搜索(對於任何我想使用的圖書館)?

回答

2

這些變量是通過find_package(XXX)調用獲得的。

此類調用被重定向,取決於庫,可以是FindXXX.cmake腳本(與CMake一起發貨或包含在使用它的項目中)或XXXConfig.cmake腳本(隨庫本身一起提供)。

因此,爲了確定有意義的變量名稱,您需要查閱適當的腳本。通常,腳本的接口(輸入輸出變量)在腳本的開頭處的註釋中被描述爲

與CMake一起提供的FindXXX.cmake腳本的文檔可能會在CMake documentation pages about modules中閱讀。

+0

謝謝! (接受這個是因爲它是第一個...)CMake附帶的FindXXX.cmake在哪裏? – Sterling

1

你不知道。它依賴於庫的查找模塊。

See here.

寫作找到你看到的變量在模塊中設置模塊。當檢查CMake-Modules目錄中的FindOpenGL.cmake模塊時,您將看到變量的名稱。

+0

凡位於CMake的模塊目錄? (Ubuntu 16.04)我在/ usr/lib/cmake下找不到它。 – Sterling

+0

@Sterling根據文章,它位於__/usr/share/cmake/Modules__下。我正在使用CLion,因爲我的安裝位於CLion目錄中,也許你的IDE也與IDE捆綁在一起(以防你正在使用)。 – Daniel

+1

啊,好的,是的,我在/usr/share/cmake-2.8/Modules中找到了我的。謝謝!! – Sterling

1

除了查閱查找模塊的文檔,您還可以使用CMake的VARIABLES屬性爲您提供由find_package()調用定義的變量。

對於例如下面的代碼:

cmake_minimum_required(VERSION 3.2) 

project(FindPackageVars) 

get_directory_property(_vars_before VARIABLES) 
find_package(OpenGL) 
get_directory_property(_vars VARIABLES) 

list(REMOVE_ITEM _vars _vars_before ${_vars_before}) 
foreach(_var IN LISTS _vars) 
    message(STATUS "${_var} = ${${_var}}") 
endforeach() 

輸出我的機器上:

-- Found OpenGL: /usr/lib/x86_64-linux-gnu/libGL.so 
-- FIND_PACKAGE_MESSAGE_DETAILS_OpenGL = [/usr/lib/x86_64-linux-gnu/libGL.so][/usr/include][v()] 
-- OPENGL_FOUND = TRUE 
-- OPENGL_GLU_FOUND = YES 
-- OPENGL_INCLUDE_DIR = /usr/include 
-- OPENGL_INCLUDE_PATH = /usr/include 
-- OPENGL_LIBRARIES = /usr/lib/x86_64-linux-gnu/libGLU.so;/usr/lib/x86_64-linux-gnu/libGL.so 
-- OPENGL_LIBRARY = /usr/lib/x86_64-linux-gnu/libGLU.so;/usr/lib/x86_64-linux-gnu/libGL.so 
-- OPENGL_XMESA_FOUND = NO 
-- OPENGL_gl_LIBRARY = /usr/lib/x86_64-linux-gnu/libGL.so 
-- OPENGL_glu_LIBRARY = /usr/lib/x86_64-linux-gnu/libGLU.so 
-- OPENGL_xmesa_INCLUDE_DIR = OPENGL_xmesa_INCLUDE_DIR-NOTFOUND