[CMake] for loop won't locate libs

Bill Hoffman bill.hoffman at kitware.com
Thu Jun 4 13:31:14 EDT 2009


eial at cs.bgu.ac.il wrote:
> On Thu 04 Jun 20:16 2009 Tyler Roscoe wrote:
>> On Thu, Jun 04, 2009 at 07:50:08PM +0300, eial at cs.bgu.ac.il wrote:
>>> SET(LIBS AR ARMulti ARvideo)
>>> FOREACH (LIB ${LIBS})
>>>    SET(FOUND_LIB)
>>>    FIND_LIBRARY(LIB_FOUND ${LIB} /usr/lib /usr/local/lib) 
>>>    SET(ARTK_LIBRARY ${ARTK_LIBRARY} ${LIB_FOUND})
>>> ENDFOREACH(LIB)
>>>
>>> the result is /usr/lib64/libAR.a/usr/lib64/libAR.a/usr/lib64/libAR.a when it should be /usr/lib64/libAR.a /usr/lib64/libARMulti.a /usr/lib64/libARvideo.a
>> What's up with set(FOUND_LIB)?
>>
>> You might be running into a quoting/list expansion problem. Try:
>> SET(ARTK_LIBRARY "${ARTK_LIBRARY}" "${LIB_FOUND}")
>>
>> or use list(APPEND ...) instead.
>>
>> tyler
>>
> 
> apparently, FOUND_LIB isn't being cleaned in each loop, that is for cleaning.
> my problem is that the loop finds only the first lib's file but not the rest, look at the output result that I've posted.
> 

Look at the docs for FIND_LIBRARY:
http://www.cmake.org/cmake/help/cmake2.6docs.html#command:find_library


"A cache entry named by <VAR> is created to store the result of this 
command. If the library is found the result is stored in the variable 
and the search will not be repeated unless the variable is cleared. If 
nothing is found, the result will be <VAR>-NOTFOUND, and the search will 
be attempted again the next time find_library is invoked with the same 
variable."

-Bill


More information about the CMake mailing list