[CMake] for loop won't locate libs
Bill Hoffman
bill.hoffman at kitware.com
Thu Jun 4 14:15:19 EDT 2009
eial at cs.bgu.ac.il wrote:
> On Thu 04 Jun 20:31 2009 Bill Hoffman wrote:
>> 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
>>
> ${FOUND_LIB-NOTFOUND} is empty in every iteration
>
>
Sure, because it is FOUND... Once it finds it it does not look for it
again. If not CMake would try to find stuff every time it runs. As the
above paragraph says: "search will not be repeated unless the variable
is cleared"
So, you either need to do a cache force to clear it, or you need to use
a different variable for each find_library.
-Bill
More information about the CMake
mailing list